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

时间:2017-06-20 14:51:27

标签: 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 OR active = 1

的结果集

只有在将我的AND子句移动到WHERE后才能得到预期的结果:

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

现在只有active = 1的行显示

1 个答案:

答案 0 :(得分:3)

它应该如何运作。您已使用两个条件离开加入user,并且必须满足这两个条件才能从中检索记录,否则您将看到来自user表的空值。

现在在第二个查询中,您只是通过单个条件加入,然后另外过滤加入的结果集,然后在您的情况下简单地成为内部联接。

更新。

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

第二个查询将带回所有有效订单以及该订单的可选用户。