2 回答
TA贡献1812条经验 获得超5个赞
你需要把它放在join条款中,而不是where:
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions ON
user_category_subscriptions.category_id = categories.category_id
and user_category_subscriptions.user_id =1
看一下inner join,把一个条款放在join或where等同于。但是,有了outer join它们,它们就大不相同了。
作为join条件,您指定要加入表的行集。这意味着,它计算user_id = 1第一,并采取子集user_category_subscriptions用user_id的1加入到所有的行categories。这将为您提供所有行categories,而只有categories此特定用户订阅的行将在user_category_subscriptions列中包含任何信息。当然,所有其他的categories将被填充null在user_category_subscriptions列。
相反,where子句执行连接,然后减少行集。因此,这会完成所有连接,然后消除所有user_id不相等的行1。你得到一个效率低下的方法inner join。
希望这有帮助!
TA贡献1817条经验 获得超6个赞
试试这个
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
WHERE user_category_subscriptions.user_id = 1
or user_category_subscriptions.user_id is null
添加回答
举报