如何从第三个查询中排除值(访问)
Posted
技术标签:
【中文标题】如何从第三个查询中排除值(访问)【英文标题】:How can I exclude values from a third query (Access) 【发布时间】:2009-10-27 22:55:58 【问题描述】:我有一个查询,它在一个查询中显示了所有机会的列表
我有一个查询向我显示了排除机会的列表,我们希望从结果中消除这些机会
我需要生成一个查询,它将第一个查询减去第二个查询中的所有内容...
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));
一个小组需要看到一切,另一个小组需要看到他们没有认为是“有效的”错失机会的事情,我们已经看到了,验证了它为什么在那里,不需要每次都去批评它单月。
【问题讨论】:
【参考方案1】:通常您可以通过左连接并与空值进行比较来排除表:
SELECT t1.* FROM t1 LEFT JOIN t2 on t1.id = t2.id where t2.id is null;
应该很容易适应你的情况。
【讨论】:
这是一个值得征服的有趣查询,稍微扭曲了数据,这对我来说非常有用,谢谢!【参考方案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 不强>匹配...这是你想要的吗?通常,连接条件基于一个表中的一列等于另一表中一列的值......在它们不相等的地方加入是不寻常的......
第二,连接条件中的第二个不等式是在same表(qryMissedOpportunity_Exclusions表)中的列之间你确定这是你想要的吗?如果是,则不是连接条件,是Where子句条件……
其次,您的问题提到了两个查询,但在您的问题中只有一个查询(以上)。第二个在哪里?
【讨论】:
我还注意到 INNER JOIN,它不适用于排除结果。以上是关于如何从第三个查询中排除值(访问)的主要内容,如果未能解决你的问题,请参考以下文章