2016-10-27 6 views
0

У меня есть пять полей в основном запросе по имени Суше. Давайте рассмотрим имена полей для легкой демонстрации как A, B, C, D, E. Suche Query выглядит примерно так:Вычитание списков из запросов в Access

A   B   C   D   E 
1   a   b      d 
2   m   n   o    
3   t   z 
4   r   m   d   b 
5   q   f   j   

Я извлек два запроса из Suche Query. Первый запрос называется DUN и она извлекает следующую из Suche Query

A   B   C   D   E 
1   a   b      d 

и второй запрос называется HOL и он извлекает следующий из Suche запроса.

A   B   C   D   E 
3   t   z 
4   r   m   d   b 

Теперь я ищу, чтобы построить третий запрос, где я хочу, чтобы найти оставшиеся неэкстрагированных записи из Suche Query. Я попытался это сделать

SELECT (Suche.A-DUN.A-HOL.A) AS FINAL FROM Suche,DUN,HOL; 

Но это не работает. Может ли кто-нибудь направить меня на то, как это сделать?

ответ

2

Один метод использует not in или not exists. Предполагая, что столбец A является уникальным, вы можете сделать:

select s.* 
from (<Suche>) as s 
where s.A not in (select d.a from (<DUN>) as d) and 
     s.A not in (select h2.a from (<HOL>) as h2); 
+0

My Bad! Понял! Спасибо –

0

Если я понял, вы могли бы использовать оператор MINUS так:

CREATE TABLE плавник AS (SELECT * FROM Suche МИНУС ВЫБОР * FROM dun MINUS SELECT * FROM hol);

Если вам не нужно создавать таблицу, игнорирует CREATE TABLE и напрямую используйте подзапрос.

+0

SQL - это общая вкладка, для конкретной версии которой требуется MS Access. – Fionnuala

+0

MS Access не поддерживает оператора MINUS. См. Здесь: http://stackoverflow.com/questions/11282433/minus-query-in-msaccess и здесь: http://stackoverflow.com/questions/337158/how-can-i-implement-sql-intersect-and -minus-операция-в-MS-доступ. Альтернативой является использование NOT IN или NOT EXISTS, как предложил Гордон Линофф. –

Смежные вопросы