2 回答

TA貢獻1812條經(jīng)驗 獲得超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列中包含任何信息。當(dāng)然,所有其他的categories將被填充null在user_category_subscriptions列。
相反,where子句執(zhí)行連接,然后減少行集。因此,這會完成所有連接,然后消除所有user_id不相等的行1。你得到一個效率低下的方法inner join。
希望這有幫助!

TA貢獻1817條經(jīng)驗 獲得超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
添加回答
舉報