mysql - MySQL 会忽略 LEFT JOIN 子句中的 AND 吗?

标签 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 的行

最佳答案

它应该是这样工作的。您将使用两个条件加入 user 并且必须同时满足这两个条件才能从中检索记录,否则您将看到来自 user 的空值表。

现在在第二个查询中,您仅通过一个条件进行连接,然后另外过滤连接的结果集,然后在您的情况下它就变成了内部连接。

更新。

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

第二个查询将带回所有事件订单和该订单的可选用户。

关于mysql - MySQL 会忽略 LEFT JOIN 子句中的 AND 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44656407/

相关文章:

php - 勾选列名中的转义连字符会生成 "unknown column in ' 字段列表'"

php - 如何在 php 查询中转义保留的 mysql 字?

MySQL数据库数据类型

c# - 使用 LINQ 仅更新一列值

python - 复合 SQL INSERT 语句

php - 根据 URL 运行不同的 MySQL 查询

带有游标和 View 的 MySQL 递归存储过程不刷新

sql - 如何从 Postgres 表中获取数据(多对多)

mysql - 如何选择特定值并将其加入第一个结果集

php - 如何在不选择所有行的情况下获取行数?