当前位置: 首页 > 面试题库 >

MySQL加入where子句

巢海
2023-03-14
问题内容

我有两个要加入的表。

我想要类别表中的所有类别以及用户在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_category_subscriptions表中的user_id。

谢谢


问题答案:

您需要将其放在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_subscriptionsuser_id1加入到所有的行categories。这将为您提供中的所有行categories,而只有categories该特定用户已订阅的行中的列才包含任何信息user_category_subscriptions。当然,所有其他字段categoriesnull在各user_category_subscriptions列中填充。

相反,where子句执行联接, 然后
减少行集。因此,这将执行所有联接,然后消除所有user_id不等于的行1。您将获得效率低下的方法inner join

希望这会有所帮助!



 类似资料:
  • 问题内容: 是否可以执行这样的mysql查询? 我需要在一般的“ where”子句中使用子查询的结果。 问题答案: 您可以将其包装在子查询中,如下所示:

  • 问题内容: 我们得到错误-“ where子句不明确的列’CategoryID’”。 告诉我请怎么会好? 问题答案: 您得到的错误告诉您子句中的列是不明确的,这意味着系统存在标识适当列的问题,因为存在多个列。 为了解决此问题,请使用别名指定要用于子句的列: 我还更改了查询以获取相同的结果,但我没有使用+子句+子查询的组合,而是使用了子句。使用此查询,您只需定义一次所需的内容,它将自动获取每个子类别。

  • 问题内容: 此查询出了什么问题: 它在没有该子句的情况下起作用。我似乎忘记了我的SQL。 问题答案: MySQL INSERT语法不支持WHERE子句,因此您的查询将失败。假设您的列是唯一键或主键: 如果您要插入ID为1的新行,则应使用: 如果您尝试更改ID为1的现有行的weight / desiredWeight值,则应使用: 如果需要,还可以使用INSERT .. ON DUPLICATE K

  • 问题内容: 这不起作用: 任何想法如何通过id将插入范围缩小到特定行? 问题答案: 在插入语句中,您将没有现有行来执行操作?您要插入新行,是否意味着要执行更新语句?

  • 问题内容: 我在mysql中的“ where in”子句中遇到问题,我无法弄清楚出了什么问题。所以我有两张桌子… 1)座位 (int)seat_id 2)寄存器 (int)register_id (varchar)seat_ids-以逗号分隔的席位,例如102,103,104 因此,我要获取匹配结果的查询是 有人可以找出问题所在吗?谢谢, 问题答案: 要求列表是文字列表,而不是逗号分隔的字符串。用

  • 问题内容: 我试图以编程方式在表中输入值。 我不能使用直接选择@variables。我必须使用关键字“值”。 在insert into中使用Values时,如何创建where子句。 我正在努力避免重复 问题答案: