Как различить две таблицы - PullRequest
3 голосов
/ 12 мая 2010

У меня есть две таблицы, и я хочу получить все записи из одной таблицы, которые отличаются от записей во второй таблице.

Например: если у нас есть четыре записи в первой таблице, такие как A, B, C, D и три записи во второй таблице, то есть A, B, C, тогда ответ на запрос должен быть D.

Я пробовал оператор "EXCEPT", но он не работает нормально. Пожалуйста, помогите мне написать правильный запрос для данной проблемы.

Ответы [ 5 ]

7 голосов
/ 12 мая 2010

Как насчет:

select * from TABLE_A where (COL,COL2,..) not in (select COL1,COL2,.. from TABLE_B) 
union all 
select * from TABLE_B where (COL1,COL2,..) not in (select COL1,COL2,.. from TABLE_A); 
3 голосов
/ 12 мая 2010

Если первая таблица называется TABLE_A, а вторая таблица называется TABLE_B, для усиления различий вы можете использовать операнд MINUS с обеих сторон.Это означает:

SELECT * FROM TABLE_B
MINUS
SELECT * FROM TABLE_A;

Предыдущий оператор показывает записи, присутствующие в TABLE_B, но не присутствующие в TABLE_A.

Конечно, вы должны использовать МИНУС на другой стороне:

SELECT * FROM TABLE_A
MINUS
SELECT * FROM TABLE_B;

Предыдущий оператор показывает записи, присутствующие в TABLE_A, но не присутствующие в TABLE_B.

Если вы не хотите использовать MINUS, вы можете создать два Oracle VIEWS с предыдущими операторами.

2 голосов
/ 12 января 2012

как насчет этого:

SELECT DISTINCT Field1
FROM Table1 
WHERE Field1 Not IN 
    (SELECT DISTINCT Field1 FROM Table2)
1 голос
/ 03 апреля 2015
SELECT * FROM TABLE_B
MINUS
SELECT * FROM TABLE_A;

Это может не работать в sqlite, но следующее работает

SELECT DISTINCT Field1
FROM Table1 
WHERE Field1 Not IN 
    (SELECT DISTINCT Field1 FROM Table2);
1 голос
/ 12 мая 2010

Вы можете использовать ИСКЛЮЧЕНИЕ, оно работает следующим образом:

Таблица испытаний1: A, B, C Таблица Test2: A, B, C, D

выберите * из test1 кроме select * из test2 : вернет вам записи, которые есть в test1 , но не в test2 . Результат будет нулевым.

выберите * из test2 кроме select * из test1 : вернет вам записи, которые присутствуют в test2 , но не в test1 . Результат для этого запроса даст вам "D".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...