mysql - 使用 LEFT JOIN 返回不匹配的行

标签 mysql sql left-join

我有一个情况,我们有一个包含所有项目的表,如果该项目已售出,它在另一个表中有一个条目。

我正在尝试退回所有售出的商品,但它似乎不起作用。

我有这个 SQL:

SELECT a.auction_id FROM auctions AS a 
LEFT JOIN winners AS w ON a.auction_id=w.auction_id AND w.winner_id IS NULL
WHERE a.owner_id=1234567 AND a.is_draft=0 AND a.creation_in_progress=0;

我认为这只会返回 auctions 表中在 winners 表中没有匹配条目的项目,因为我正在执行 AND w。 winner_id 为空

然而,它似乎仍然返回与我离开时相同数量的行 AND w.winner_id IS NULL

最佳答案

SELECT a.auction_id
  FROM auctions AS a
  LEFT JOIN winners AS w
    ON a.auction_id = w.auction_id
 WHERE a.owner_id = 1234567
   AND a.is_draft = 0
   AND a.creation_in_progress = 0
   AND w.winner_id IS NULL

这属于 WHERE 子句:

   AND w.winner_id IS NULL

当您想要允许空值时,外部连接表上的条件属于 ON 子句。在这种情况下,您过滤空值时,将该条件放入 WHERE 子句中。 ON 子句中的所有内容都旨在允许空值。

以下是一些使用我不久前回答的问题中的数据的示例:

正确使用 x 为 null 的地方: http://sqlfiddle.com/#!2/8936b5/2/0

同样的事情,但不正确地将标准放入 ON 子句中: http://sqlfiddle.com/#!2/8936b5/3/0

(注意功能差异,结果不一样,因为查询在功能上不等价)

关于mysql - 使用 LEFT JOIN 返回不匹配的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25095284/

相关文章:

php - 在 mysql 更新查询中使用两个具有不同键的数组

sql - SQL 查询中 (+) 的含义

join - 如何在 kdb 中执行有效的左连接?

MySQL SUM left join 显示所有类别即使总和为0

PHP 和 MySQL 问题

mysql - 如何从数据库中查询/搜索某个用户的非好友姓名?

php - 用于容纳具有可变多个选项的产品的数据库结构

mysql - 创建触发器语法错误

MySQL 选择标签

sql - 使用左关节时如何检查列是否没有任何值?