Как правильно использовать «Не равно» в MS Access? - PullRequest
10 голосов
/ 06 февраля 2010

Цель:

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

Текущий запрос:

SELECT DISTINCT Table1.Column1
FROM Table2, Table1
WHERE Table1.Column1 <> Table2.Column1 

Результаты запроса:

Что происходит, когда я пытаюсь выполнить этот запрос, - индикатор выполнения заполняется почти сразу, но затем он в значительной степени зависает и больше ничего не делает, насколько я вижу. Когда я использую знак = вместо <>, он выводит значения, которые равны, просто отлично, а если я заменяю Table2.Column1 фактическим фактическим значением, он работает просто отлично.

Я просто запустил его еще раз при наборе этого вопроса, и на этот раз ответ дал мне ответ на этот раз, но он содержит все значения DISTINCT для столбца, а не все значения, уникальные для этой таблицы, как и должно быть.

Любые идеи о том, что я делаю неправильно или отсутствует здесь?

Ответы [ 3 ]

17 голосов
/ 06 февраля 2010

Как это

SELECT DISTINCT Table1.Column1
FROM Table1
WHERE NOT EXISTS( SELECT * FROM Table2
    WHERE Table1.Column1 = Table2.Column1  )

Вы хотите НЕ СУЩЕСТВУЕТ, а не "Не равно"


Кстати, вы редко хотите написать предложение FROM следующим образом:

FROM Table1, Table2

, поскольку это означает «FROM all комбинаций каждой строки в Table1 с каждой строкой в ​​Table2 ...» Обычно это намного больше строк результата, чем вы когда-либо хотели видеть. И в редком случае, когда вы действительно хотите это сделать, более приемлемый синтаксис:

FROM Table1 CROSS JOIN Table2
2 голосов
/ 06 февраля 2010

В Access вы, вероятно, обнаружите, что объединение происходит быстрее, если ваши таблицы очень маленькие:

SELECT DISTINCT Table1.Column1
FROM Table1 
LEFT JOIN Table2
ON Table1.Column1 = Table2.Column1  
WHERE Table2.Column1 Is Null

Это исключит из списка все записи с соответствием в таблице 2.

0 голосов
/ 26 октября 2014

Я изо всех сил пытался получить запрос на возврат полей из Таблицы 1, которых нет в Таблице 2, и пробовал большинство ответов выше, пока не нашел очень простой способ получить результаты, которые я хотел.

Я установил свойства соединения между таблицей 1 и таблицей 2 на третий параметр (3) (все поля из таблицы 1 и только те записи из таблицы 2, где объединенные поля равны) и поместил значение Is Null в поле критериев запроса в таблице 2 в поле, для которого я тестировал. Работает отлично.

Спасибо всем выше, хотя.

...