我的情况是我们有一个包含所有项目的表格,如果该项目已售出,则在另一个表格中有一个条目。
我正在尝试获取已退出不的所有商品,但它似乎无效。
我有这个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 IS NULL
。
然而,它似乎仍然返回与我离开AND w.winner_id IS NULL
时相同的行数。
答案 0 :(得分:3)
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
(注意FUNCTIONAL差异,结果不一样,因为查询在功能上并不相同)