当我尝试这样做时:
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
的行
最佳答案
它应该是这样工作的。您将使用两个条件加入 user
并且必须同时满足这两个条件才能从中检索记录,否则您将看到来自 user
的空值表。
现在在第二个查询中,您仅通过一个条件进行连接,然后另外过滤连接的结果集,然后在您的情况下它就变成了内部连接。
更新。
您的第一个查询将返回表中的每个订单,如果该订单处于事件状态,则可选择返回用户。非事件订单将作为用户为 null。它不限制你的订单,它只是告诉 MySQL 为每个事件记录返回用户
第二个查询将带回所有事件订单和该订单的可选用户。
关于mysql - MySQL 会忽略 LEFT JOIN 子句中的 AND 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44656407/