MySQL与where子句连接

我有两张桌子想加入。


我想要类别表中的所有类别以及category_subscriptions表中用户订阅的所有类别。


基本上这是我目前的查询:


SELECT *

FROM categories

LEFT JOIN user_category_subscriptions 

     ON user_category_subscriptions.category_id = categories.category_id

这工作正常,但我想在查询的末尾添加一个where子句,然后基本上使它成为内部/ equi连接。


   SELECT *

    FROM categories

    LEFT JOIN user_category_subscriptions 

         ON user_category_subscriptions.category_id = categories.category_id 

   WHERE user_category_subscriptions.user_id = 1

如何仅使用一个查询获取特定用户订阅的所有类别以及所有类别?


category_id是类别表和user_category_subscriptions中的键。user_id驻留在user_category_subscriptions表中。


谢谢


哆啦的时光机
浏览 633回答 2
2回答

ABOUTYOU

你需要把它放在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。希望这有帮助!

慕的地6264312

试试这个  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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL