FULL JOIN
не кажется необходимым - на самом деле FULL JOIN
почти никогда не требуется, особенно для стандартных JOIN
s в хорошо структурированной базе данных.
Структура вопроса предлагает NOT EXISTS
:
SELECT b.*
FROM dbo.Building b
WHERE NOT EXISTS (SELECT 1
FROM dbo.Building_metering bm JOIN
dbo.Metering_Company mc
ON bm.Elec_ID = mc.Elec_ID JOIN
dbo.Metering_Type mt
ON mt.MType_ID = mc.MType_ID
WHERE bm.Bld_ID = b.Bld_ID AND mt.Mtype_Name = 'POSTPAID'
);
Вы также можете express это как LEFT JOIN
и фильтрацию:
SELECT b.*
FROM dbo.Building b LEFT JOIN
dbo.Building_metering bm
ON bm.Bld_ID = b.Bld_ID LEFT JOIN
dbo.Metering_Company mc
ON bm.Elec_ID = mc.Elec_ID LEFT JOIN
dbo.Metering_Type mt
ON mt.MType_ID = mc.MType_ID AND
mt.Mtype_Name = 'POSTPAID'
WHERE mt.MType_ID IS NULL;
Это позволяет вам выбирать столбцы из любой таблицы.
Примечания:
FULL JOIN
почти никогда не требуется. - Используйте понятные псевдонимы таблиц! Произвольные буквы ничего не значат. Используйте аббревиатуры таблиц.
- Экранирование имен столбцов и таблиц квадратными скобками только затрудняет запись и чтение кода.