Я пытаюсь написать запрос, который возвращает список записей из двух таблиц, в которых либо в таблицах нет записей, привязанных к каждой, либо найден флаг, говорящий не о ie записи.
Например:
Дома
╔════╦══════════════╦
║ Id ║ Name ║
╠════╬══════════════╬
║ 1 ║ 10 Maple ║
║ 2 ║ 20 Oak ║
║ 3 ║ 30 Drive ║
╚════╩══════════════╩
HousesOccupants
╔════╦══════════════╦═════════════╦════════════════╗
║ 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)
Как исправить следующий запрос, чтобы получить правильный набор данных?