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

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,它不适用于排除结果。

以上是关于如何从第三个查询中排除值(访问)的主要内容,如果未能解决你的问题,请参考以下文章

在 ms 访问中排除空值的选择查询是啥

SQL LEFT JOIN 从第二个表中排除两条记录

从计算值中排除列

CakePHP:随机查询一个结果,排除两个值

如何使用 Django ORM 排除列的多个值?

Grafana 使用通配符从查询中排除值