当我尝试这个时:
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
的行显示
答案 0 :(得分:3)
它应该如何运作。您已使用两个条件离开加入user
,并且必须满足这两个条件才能从中检索记录,否则您将看到来自user
表的空值。
现在在第二个查询中,您只是通过单个条件加入,然后另外过滤加入的结果集,然后在您的情况下简单地成为内部联接。
更新。
您的第一个查询将返回表中的每个订单,如果该订单处于活动状态,则可选择返回用户。非活动订单将以用户身份使用null。它不会限制您的订单,它只是告诉MySQL为每个活动记录返回用户
第二个查询将带回所有有效订单以及该订单的可选用户。