MySQL是否忽略了LEFT JOIN子句中的AND?

MySQL是否忽略了LEFT JOIN子句中的AND?,mysql,sql,Mysql,Sql,当我尝试这个: SELECT order.id, order.active, user.id FROM order LEFT JOIN user on user.id = order.user_id AND order.active = 1; 它返回的结果集具有active=0或active=1 只有在将我的AND子句移动到达到预期结果的位置后: SELECT order.id, order.active, user.id FROM order

当我尝试这个:

SELECT
    order.id,
    order.active,
    user.id
FROM order
LEFT JOIN user on user.id = order.user_id AND order.active = 1;
它返回的结果集具有
active=0或active=1

只有在将我的AND子句移动到达到预期结果的位置后:

SELECT
    order.id,
    order.active,
    user.id
FROM order
LEFT JOIN user on user.id = order.user_id 
WHERE order.active = 1;

现在只有
active=1
的行才会显示,这就是它应该如何工作的。您将使用两个条件加入
user
,并且必须满足这两个条件才能从中检索记录,否则您将看到来自
user
表的空值

现在在第二个查询中,您只需通过一个条件进行连接,然后额外过滤连接的结果集,在您的案例中,该结果集将成为一个内部连接

更新

第一个查询将返回表中的每一个订单,如果该订单处于活动状态,还可以选择返回用户。非活动订单的用户身份为空。它并不限制您的订单,它只是告诉MySQL为每个活动记录返回用户


第二个查询将返回所有活动订单以及该订单的可选用户

这就是
LEFT
join的本质。您是否理解
内部连接
外部连接
之间的区别?只有where“指定”您的预期过滤器可能重复,因此我认为您挂断的位置在
订单上。active=1
。问题是“为什么连接条件限制不适用于结果;如果对user.name(如“K%”)等用户应用筛选器,则只能返回以K开头的用户及其相关订单。那么为什么它以一种方式工作,而不是以另一种方式工作呢?我在尝试筛选第一个表的记录时,挂断了使用左连接的连接,不知怎的,我认为和条件会为我删除第一个表的记录。你已经涵盖了所有与我相同的要点,但措辞更好-删除了我的答案…除了最后一部分-它不是内部连接,订单中与用户不匹配的行仍将保留returned@Bridge我想可以说我赢得了比赛条件我理解你的第二段,但不是第一段。我使用的两个条件都是true,其中一个是
active
必须是
1
,但它也返回
0
,因此存在不和谐。我还在努力解决这个问题。你说得对,错过了。但一般来说,若在where子句中过滤右表中的值,它将成为内部联接(至少在逻辑上)