gpt4 book ai didi

MySQL 使用 where 子句进行连接

转载 作者:行者123 更新时间:2023-11-29 15:36:01 25 4
gpt4 key购买 nike

我有两张 table 想要加入。

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

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

SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id

这工作正常,但是我想在查询末尾添加一个 where 子句,这实际上使其成为内部/等连接。

   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 表中。

谢谢

最佳答案

您需要将其放在 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

请注意,使用内部联接,将子句放入joinwhere 中是等效的。然而,使用外连接,它们就大不相同了。

作为联接条件,您可以指定要联接到表的行集。这意味着它首先评估 user_id = 1,并采用 user_id1user_category_subscriptions 子集来加入类别中的所有行。这将为您提供 categories 中的所有行,而只有该特定用户已订阅的 categories 才会在 user_category_subscriptions 中包含任何信息列。当然,所有其他类别都将在user_category_subscriptions列中填充null

相反,where 子句执行连接,then 减少行集。因此,这会执行所有连接,然后消除 user_id 不等于 1 的所有行。您只剩下一种低效的方式来获取内部联接

希望这有帮助!

关于MySQL 使用 where 子句进行连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58225395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com