2015-03-04 3 views
1

У меня есть работа, чтобы обновить данные таблицы поиска, для которых мне нужна помощь. У меня есть 2 таблицы с данными, одна из них - существующая версия (таблица1), а другая - новая версия (таблица2). Первичный ключ для каждой из таблиц - это составной ключ. Я знаю, что в каждом есть несколько строк, и мне нужно выяснить различия. Предположим, что часть 2 столбца составного первичного ключа будет называться column1 и column2.Сравнение записей таблиц на основе составного ключа

Как правило, в «обычной» настройке первичного ключа я бы просто искал значения первичного ключа НЕ В списке первичных ключей из другой таблицы. Но я не знаю, как это сделать с помощью составного первичного ключа.

Я нашел подобный поток для SQL Server, но это, похоже, не работает в моем случае, не уверен, что я делаю что-то неправильно.

How can I compare rows from 2 tables that have composite primary keys?

Может кто-то поможет мне сравнить строки из этих двух таблиц в Oracle/PostgreSQL?

+0

'SELECT ... FROM from WHERE NOT EXISTS (SELECT * FROM b WHERE b.x = a.x AND b.y = a.y); BTW: эта шляпа не имеет ничего общего с первичными ключами; он работает и для не-ключевых столбцов. – wildplasser

+0

Запрос «FULL JOIN» будет работать как в Postgres, так и в Oracle. –

+0

Что вы хотите в качестве вывода? Все столбцы из таблиц? Или просто значения PK? –

ответ

2
SELECT ... 
FROM a 
WHERE NOT EXISTS (
    SELECT * 
    FROM b 
    WHERE b.x = a.x AND b.y = a.y 
); 

BTW: эта шляпа не имеет ничего общего с первичными ключами; он работает и для не-ключевых столбцов.

0

Вы можете использовать NOT IN с составными значениями. Пример:

Но другие варианты синтаксиса, как правило, проще/быстрее/более надежен:

NOT EXISTS как @wildplasser публикуемых является хорошим кандидатом для лучшее представление.