Использование 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
)
Другие вопросы по тегам