Ms Access - 显示两个查询结果之间的差异
Ms Access - show difference between two query results
我编写了两个查询,它们对相同的 3 个字段显示不同的结果:
所有相关数据,显示ITEM_NUMBER、MFR、和MFR_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_NUMBER、MFR 的 unique 个实例, 和 MFR_PN 其中 returns 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最多两次, 具有不同的 MFR 和 MFR_PN)
我想创建第三个查询,显示查询 1 中不存在于查询 2 中的所有记录,显示 63 行。
我想过使用 WHERE NOT EXISTS 使用以下查询,但它 returns 是一个空集。
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 子句条件应用于您的结果不同所依据的属性。即独一无二的
我编写了两个查询,它们对相同的 3 个字段显示不同的结果:
所有相关数据,显示ITEM_NUMBER、MFR、和MFR_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_NUMBER、MFR 的 unique 个实例, 和 MFR_PN 其中 returns 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最多两次, 具有不同的 MFR 和 MFR_PN)
我想创建第三个查询,显示查询 1 中不存在于查询 2 中的所有记录,显示 63 行。
我想过使用 WHERE NOT EXISTS 使用以下查询,但它 returns 是一个空集。
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 子句条件应用于您的结果不同所依据的属性。即独一无二的