您需要将其放在
join子句中,而不是
where:
SELECt *FROM categoriesLEFT 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。
希望这会有所帮助!



