【发布时间】:2020-05-15 03:24:00
【问题描述】:
我正在尝试编写一个查询,该查询返回两个表中的记录列表,其中表没有与每个表关联的记录,或者发现一个标志表示不关联记录。
例如:
房子
╔════╦══════════════╦
║ Id ║ Name ║
╠════╬══════════════╬
║ 1 ║ 10 Maple ║
║ 2 ║ 20 Oak ║
║ 3 ║ 30 Drive ║
╚════╩══════════════╩
房屋居住者
╔════╦══════════════╦═════════════╦════════════════╗
║ Id ║ HouseId ║ OccupentId ║ LeftOn ║
╠════╬══════════════╬═════════════╬════════════════╣
║ 1 ║ 1 ║ 1 ║ NULL ║
║ 2 ║ 1 ║ 1 ║ 2019-01-01 ║
║ 3 ║ 3 ║ 2 ║ 2019-01-01 ║
╚════╩══════════════╩═════════════╩════════════════╝
我正在尝试编写一个 SQL 查询来查找“空”房屋。例如。没有居住者或居住者离开的房屋。最终结果是:
╔════╦══════════════╦
║ Id ║ Name ║
╠════╬══════════════╬
║ 2 ║ 20 Oak ║
║ 3 ║ 30 Drive ║
╚════╩══════════════╩
请注意房屋 1 不在此列表中,因为即使居住者离开他又回来了。
到目前为止我的查询(非常偏离)看起来像:
SELECT *
FROM Houses H
INNER JOIN HousesOccupants HO ON HO.HouseId = H.Id
WHERE NOT EXISTS (
SELECT *
FROM HousesOccupants
WHERE HousesOccupants.LeftOn IS NULL
AND HO.HouseId = H.Id
)
OR (HO.Id IS NULL)
如何修复以下查询以返回正确的数据集?
【问题讨论】:
-
您从该查询中得到什么结果?
HO.Id IS NULL永远不会是NULL,除非您使用LEFT JOIN
标签: sql sql-server tsql sql-server-2012