Как я могу исключить значения из третьего запроса (Access) - PullRequest
0 голосов
/ 28 октября 2009

У меня есть запрос, который показывает мне список ВСЕХ возможностей в одном запросе

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

Мне нужно создать запрос, который будет принимать все от первого запроса минус второй запрос ...

SELECT DISTINCT qryMissedOpportunity_ALL_Clients.*
FROM qryMissedOpportunity_ALL_Clients INNER JOIN qryMissedOpportunity_Exclusions ON
([qryMissedOpportunity_ALL_Clients].[ClientID] <> [qryMissedOpportunity_Exclusions].[ClientID])
AND
([qryMissedOpportunity_Exclusions].[ClientID] <> [qryMissedOpportunity_Exclusions].[BillingCode])

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

РЕДАКТИРОВАТЬ - Два исходящих запроса

qryMissedOpportunity_ALL_Clients (1)

SELECT MissedOpportunities.MOID, PriceList.BillingCode, Client.ClientID, Client.ClientName, PriceList.WorkDescription, PriceList.UnitOfWork, MissedOpportunities.Qty, PriceList.CostPerUnit AS Our_PriceList_Cost, ([MissedOpportunities].[Qty]*[PriceList].[CostPerUnit]) AS At_Cost, MissedOpportunities.fBegin
FROM PriceList INNER JOIN (Client INNER JOIN MissedOpportunities ON Client.ClientID = MissedOpportunities.ClientID) ON PriceList.BillingCode = MissedOpportunities.BillingCode
WHERE (((MissedOpportunities.fBegin)=#10/1/2009#));

qryMissedOpportunity_Exclusions

SELECT qryMissedOpportunity_ALL_Clients.*, MissedOpportunity_Exclusions.Exclusion, MissedOpportunity_Exclusions.Comments
FROM qryMissedOpportunity_ALL_Clients INNER JOIN MissedOpportunity_Exclusions ON (qryMissedOpportunity_ALL_Clients.BillingCode = MissedOpportunity_Exclusions.BillingCode) AND (qryMissedOpportunity_ALL_Clients.ClientID = MissedOpportunity_Exclusions.ClientID)
WHERE (((MissedOpportunity_Exclusions.Exclusion)=True));

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

Ответы [ 2 ]

2 голосов
/ 28 октября 2009

Как правило, вы можете исключить таблицу, выполнив левое соединение и сравнив его с нулем:

SELECT t1.* FROM t1 LEFT JOIN t2 on t1.id = t2.id where t2.id is null;

Должно быть довольно легко приспособить это к вашей ситуации.

2 голосов
/ 28 октября 2009

Глядя на ваш запрос, переписанный с использованием псевдонимов таблиц, чтобы я мог его прочитать ...

SELECT DISTINCT c.*
FROM qryMissedOpportunity_ALL_Clients c
   JOIN qryMissedOpportunity_Exclusions e
      ON c.ClientID <> e.ClientID
        AND  e.ClientID <> e.BillingCode

Этот запрос произведет декартово произведение вида ... каждая строка в qryMissedOpportunity_ALL_Clients будет соответствовать и объединяться с каждой строкой в ​​qryMissedOpportunity_Exclusions, где ClientIDs не соответствует ... Это то, что вы хотите ?? Обычно условия объединения основаны на том, что столбец в одной таблице равен значению столбца в другой таблице ... Соединение, когда они не равны, является необычным ...

Во-вторых, второе неравенство в условиях соединения находится между столбцами в одной и той же таблице (таблица qryMissedOpportunity_Exclusion). Вы уверены, что хотите именно этого? Если это так, это не условие соединения, это условие условия Where ...

Во-вторых, в вашем вопросе упоминается два запроса, но в вашем вопросе есть только один (выше). Где второй?

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