我有两张 table 想加入 .
我想要类别表中的所有类别以及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表中 .
谢谢
2 回答
你需要把它放在
join
子句中,而不是where
:请参阅
inner join
,在join
或where
中放置一个子句是等效的 . 然而,对于outer join
,它们是截然不同的 .作为
join
条件,您指定要加入表的行集 . 这意味着它首先计算user_id = 1
,并将user_category_subscriptions
的子集与user_id
1
连接到categories
中的所有行 . 这将为您提供categories
中的所有行,而只有此特定用户订阅的categories
将在user_category_subscriptions
列中包含任何信息 . 当然,所有其他categories
将在user_category_subscriptions
列中填充null
.相反,
where
子句执行连接,然后减少行集 . 因此,这会完成所有连接,然后消除user_id
不等于1
的所有行 . 你得到一个低效的方式来获得inner join
.希望这有帮助!
试试这个