Как правильно использовать "Не равно" в MS Access?
Цель:
Цель этого запроса - выбрать все отдельные значения в одном столбце, которые не существуют в аналогичном столбце в другой таблице.
Текущий запрос:
SELECT DISTINCT Table1.Column1
FROM Table2, Table1
WHERE Table1.Column1 <> Table2.Column1
Результаты запроса:
Что происходит, когда я пытаюсь запустить этот запрос, индикатор выполнения заполняется почти сразу, но затем он довольно сильно зависает и не делает ничего другого, насколько я могу видеть. Когда я использую знак an вместо < > , он выводит значения, которые являются равными только штрафам, и если я заменяю Table2.Column1 фактическим фактическим значением, он работает просто отлично.
Я просто запустил его снова, набрав этот вопрос, и указанный выше запрос дал мне ответ на этот раз, но у него есть все значения DISTINCT для столбца, а не все значения, уникальные для этой таблицы, как это должно быть.
Любые идеи о том, что я делаю неправильно или не хватает здесь?
Ответы
Ответ 1
Подобно этому
SELECT DISTINCT Table1.Column1
FROM Table1
WHERE NOT EXISTS( SELECT * FROM Table2
WHERE Table1.Column1 = Table2.Column1 )
Вы хотите НЕ СУЩЕСТВОВАТЬ, а не "Не равно"
Кстати, вы редко хотите написать предложение FROM следующим образом:
FROM Table1, Table2
поскольку это означает "ОТ всех комбинаций каждой строки в таблице 1 с каждой строкой в таблице2..." Обычно это намного больше строк результатов, чем вы когда-либо хотели видеть. И в редком случае, что вы действительно хотите это сделать, более приемлемым синтаксисом является:
FROM Table1 CROSS JOIN Table2
Ответ 2
В Access вы, скорее всего, найдете "Присоединиться" быстрее, если ваши таблицы не очень малы:
SELECT DISTINCT Table1.Column1
FROM Table1
LEFT JOIN Table2
ON Table1.Column1 = Table2.Column1
WHERE Table2.Column1 Is Null
Это исключает из списка все записи с совпадением в таблице2.
Ответ 3
Я попытался получить запрос, чтобы вернуть поля из Таблицы 1, которых нет в таблице 2, и попробовал большинство ответов выше, пока не нашел очень простой способ получить результаты, которые я хотел.
Я установил свойства соединения между таблицей 1 и таблицей 2 в третий параметр (3) (все поля из таблицы 1 и только те записи из таблицы 2, где объединенные поля равны) и поместили a Null в поле критериев запроса в таблице 2 в той области, в которой я тестировал. Он отлично работает.
Спасибо всем выше, хотя.