我写了两个查询,它们对相同的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,和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,而MFR和MFR_PN却不同)
我想创建第三个查询,显示查询2中不存在的查询1中的所有记录,并显示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拥有一个文档页面,该页面说明了如何在不使用关键字的情况下在SQL中实现MINUS(REMOVE)运算符功能
碰巧的是,您已经非常接近了,您只需要向NOT NOTISTS查询中添加一组额外的条件即可。
所以这样的事情应该工作:
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
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句