Использование SQL EXCEPT только по первичному ключу
У меня есть 2 таблицы (A и B) в моей базе данных, и мне нужно объединить обе. Обе таблицы имеют составные ключи (девять столбцов) в качестве первичного ключа, и между таблицами есть повторяющиеся строки.
Я мог бы использовать "ИСКЛЮЧИТЬ", чтобы получить строки, присутствующие в результате SELECT A, но не в результате SELECT B, но в дальнейшем мне нужно получить другие столбцы, которые вместе не дублируют строки. Т.е.
SELECT ckA1, ckA2, ... ckA9, columnA1, columnA2, ... columnAN
FROM A
EXCEPT
SELECT ckB1, ckB2, ... ckB9, columnB1, columnB2, ... columnBN
FROM B
где ckA1 = ckB1, ckA2 = ckB2, ... ckA9 = ckB9, но columnA1 не обязательно равно столбцу B1, columnA2 не обязательно равно столбцу B2 и т. д.
Есть ли способ решить эту проблему?
1 ответ
Решение
Использование NOT EXISTS
оператор и коррелированный подзапрос:
SELECT ckA1, ckA2, ... ckA9, columnA1, columnA2, ... columnAN
FROM A
WHERE NOT EXISTS (
SELECT 1 FROM B
WHERE ckA1 = ckB1, ckA2 = ckB2, ... ckA9 = ckB9
)