Как получить все строки в одной таблице, которых нет в другой в MS Access? - PullRequest
7 голосов
/ 07 апреля 2009

Я пробовал кучу разных вещей, но всегда получаю синтаксические ошибки.

У меня есть две таблицы - таблица A и таблица B. Они оба имеют поле con_number в качестве уникального идентификатора. Я хочу выбрать все строки в таблице B, которые не существуют в таблице A.

Может кто-нибудь дать мне этот запрос, как это было бы в MS Access?

Я знаю, что использование NOT IN в этом случае совершенно неэффективно, поэтому, если есть лучший способ, это было бы здорово.

Спасибо.

Ответы [ 4 ]

18 голосов
/ 07 апреля 2009
SELECT TableB.con_number
FROM TableB
WHERE NOT EXISTS (SELECT 1 
                  FROM TableA 
                  WHERE TableA.con_number = TableB.con_number);
2 голосов
/ 07 апреля 2009

Существует мастер Find Unmatched, который настроит это. SQL это:

SELECT TableB.con_number
FROM TableB LEFT JOIN TableA 
ON TableB.con_number = TableA.con_number
WHERE TableA.con_number Is Null
2 голосов
/ 07 апреля 2009

НЕ В версии (медленно, но верно):

SELECT con_number
FROM TableB
WHERE con_number NOT IN (SELECT con_number FROM tableA);

экспериментальная версия (не знаю, будет ли это быстрее, попробуйте):

SELECT B.con_number, MAX(A.con_number) AS check
FROM tableB B LEFT JOIN tableA A ON B.con_number = A.con_number
GROUP BY B.con_number
HAVING check IS NULL;

Примечание: оба должны быть достаточно стандартными SQL, я не знаю каких-либо специфических функций ms-access

0 голосов
/ 07 апреля 2009

Я помню что-то вроде этого:

SELECT * FROM TableA.* LEFT JOIN TableB _
    ON TableA.con_number = TableB.con_number WHERE 'criteria'

Но я не помню, какие «критерии» использовать

... TableA.con_number <> TableB.con_Number
... TableB.con_number IS NULL
... TableA.con_number NOT like TableB.con_Number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...