如何从第三个查询中排除值(Access)

时间:2009-10-27 22:55:58

标签: sql ms-access join

我有一个查询,向我显示一个查询中所有商机的列表

我有一个查询向我展示了排除机会列表,我们要从结果中消除这些机会

我需要生成一个查询,它将从第一个查询减去第二个查询...

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 个答案:

答案 0 :(得分:2)

查看您的查询被重写以使用表别名,以便我可以阅读...

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中的每一行匹配并加入,其中ClientID 不会 匹配......这是你想要的吗?通常,连接条件基于一个表中的列等于另一个表中的列的值...加入它们不相等的位置是不常见的......

其次,连接条件中的第二个不等式是 相同 表中的列之间(qryMissedOpportunity_Exclusions表)您确定这是您想要的吗?如果是,则它不是连接条件,它是Where子句条件......

其次,您的问题提到了两个查询,但在您的问题中只有一个查询(上图)。第二个在哪里?

答案 1 :(得分:2)

通常,您可以通过执行左连接并与null进行比较来排除表:

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

根据你的情况应该很容易采用这个。