我有 2 个 mysql 表 a 和 b。我需要使用公共列"ID"显示 a 中不在 b 中的所有记录。通常这很简单,但我的问题是:我需要在表 b 上放置一个 where 子句,因为我对所有不匹配的记录都不感兴趣,只对那些满足表 2 where 子句标准的记录感兴趣:
SELECT a.ID, a.Description
FROM a
LEFT JOIN b ON a.ID = b.ID
WHERE a.Inactive = 0
AND b.Room = '101'
AND b.ID Is Null
这将不返回任何内容。但是,如果我删除AND b.Room = '101'
部分,它会显示预期的结果。但是我需要这个条件,因为我只需要特定于"房间"的不匹配记录,而不是所有不匹配的记录
将涉及表b
的条件从 WHERE 移动到 ON 子句:
SELECT a.ID, a.Description
FROM a
LEFT JOIN b ON a.ID = b.ID AND b.Room = '101'
WHERE a.Inactive = 0
AND b.ID Is Null
它将查找 a 在 b 中没有匹配项的行(id 匹配项和房间号 = 101(。