微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ms Access - 显示两个查询结果之间的差异

如何解决Ms Access - 显示两个查询结果之间的差异

我编写了两个查询显示相同 3 个字段的不同结果:

所有相关数据,显示ITEM_NUMBERMFRMFR_PN,返回 164 条不同的行

SELECT NewMNFData.ITEM_NUMBER,NewMNFData.MFR,NewMNFData.MFR_PN
FROM NewMNFData INNER JOIN ([B-K Data] INNER JOIN [BK-Analogic-PN-CDB2006-import] ON [B-K Data].[B-K no] = [BK-Analogic-PN-CDB2006-import].[BK PN]) ON NewMNFData.ITEM_NUMBER = [BK-Analogic-PN-CDB2006-import].[Analogic PN];

一个查询显示ITEM_NUMBERMFR独特实例MFR_PN 返回 101 条不同的行。

SELECT NewMNFData.ITEM_NUMBER,Min(NewMNFData.MFR) AS MinOfMFR,Min(NewMNFData.MFR_PN) AS MinOfMFR_PN
FROM NewMNFData INNER JOIN ([B-K Data] INNER JOIN [BK-Analogic-PN-CDB2006-import] ON [B-K Data].[B-K no] = [BK-Analogic-PN-CDB2006-import].[BK PN]) ON NewMNFData.ITEM_NUMBER = [BK-Analogic-PN-CDB2006-import].[Analogic PN]
GROUP BY NewMNFData.ITEM_NUMBER;

区别在于ITEM_NUMBER的唯一性(相同的ITEM_NUMBER最多两次,不同的MFRMFR_PN )

我想创建第三个查询显示查询 1 中不存在于查询 2 中的所有记录,显示 63 行。

我想通过 WHERE NOT EXISTS 使用以下查询,但它返回一个空集。

SELECT AllMFR.*
FROM AllMFR
WHERE NOT EXISTS(
SELECT UniqueMFR.*
FROM UniqueMFR);

解决方法

如果 Access 实现了所有 ISO SQL 集合运算符(UNION、INTERSECTION、REMOVE),这会容易得多,因为您需要的是 REMOVE 操作(在 Oracle 中称为 MINUS)。但是,像 MySql 一样 MS-Access 只实现了 UNION 操作符。幸运的是,MySql 有一个文档页面解释了 how to implement the MINUS (REMOVE) operator functionality in SQL without the keyword

碰巧,您已经非常接近了,您只需要向 NOT EXISTS 查询添加一组额外的条件即可。

所以这样的事情应该可行:

SELECT AllMFR.*
FROM AllMFR
WHERE NOT EXISTS(
    SELECT *
    FROM UniqueMFR
    WHERE UniqueMFR.ITEM_NUMBER = AllMFR.ITEM_NUMBER
      AND UniqueMFR.MFR         = AllMFR.MFR
      AND UniqueMFR.MFR_PN      = AllMFR.MFR_PN
    );
,

您始终可以使用 Not In 常用语法:

Select * from Table1(164 records) where Id/ItemNum Not In (Query 2)

您的查询可以按如下方式编辑以获得所需的结果

SELECT NewMNFData.ITEM_NUMBER,NewMNFData.MFR,NewMNFData.MFR_PN
FROM NewMNFData INNER JOIN ([B-K Data] INNER JOIN [BK-Analogic-PN-CDB2006-import] ON [B-K Data].[B-K no] = [BK-Analogic-PN-CDB2006-import].[BK PN]) ON NewMNFData.ITEM_NUMBER = [BK-Analogic-PN-CDB2006-import].[Analogic PN] 
WHERE NewMNFData.ITEM_NUMBER NOT IN (SELECT NewMNFData.ITEM_NUMBER,Min(NewMNFData.MFR) AS MinOfMFR,Min(NewMNFData.MFR_PN) AS MinOfMFR_PN
    FROM NewMNFData INNER JOIN ([B-K Data] INNER JOIN [BK-Analogic-PN-CDB2006-import] ON [B-K Data].[B-K no] = [BK-Analogic-PN-CDB2006-import].[BK PN]) ON NewMNFData.ITEM_NUMBER = [BK-Analogic-PN-CDB2006-import].[Analogic PN]
    GROUP BY NewMNFData.ITEM_NUMBER;)

请记住,根据您的结果不同,对属性应用 Where 子句条件。即独特的

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。