我遇到以下问题的问题。基本上,下面的查询为我提供了ITEM_MASTER表格中的所有项目,这些项目位于“9999'来自ITEM_LOCATION表,状态为' C'再次在ITEM_LOCATION表中。我想检查以下查询中的这些项目是否也位于任何其他位置且状态为“A'”。
所以基本上我想要交叉引用此查询中的项目,看看它们中是否有任何一个也出现在任何其他位置,而不仅仅是9999,如果它们的状态为' A'
SELECT IM.ITEM MIN,
IM.ITEM_DESC,
IL.ITEM MIN,
IL.LOC,
IL.STATUS
FROM ITEM_MASTER IM,ITEM_LOC IL
WHERE IM.ITEM_LEVEL = 2
AND IM.TRAN_LEVEL = 2
AND IL.STATUS = 'C'
AND IM.ITEM = IL.ITEM
AND IL.LOC = 9999;
谢谢!
答案 0 :(得分:5)
首先,您应该使用正确的join
语法编写查询:
SELECT IM.ITEM MIN, IM.ITEM_DESC,
IL.ITEM MIN, IL.LOC, IL.STATUS
FROM ITEM_MASTER IM JOIN
ITEM_LOC IL
ON IM.ITEM = IL.ITEM
WHERE IM.ITEM_LEVEL = 2 AND IM.TRAN_LEVEL = 2 AND IL.STATUS = 'C' AND
IL.LOC = 9999;
您可以使用exists
完成所需内容:
SELECT IM.ITEM MIN, IM.ITEM_DESC,
IL.ITEM MIN, IL.LOC, IL.STATUS
FROM ITEM_MASTER IM JOIN
ITEM_LOC IL
ON IM.ITEM = IL.ITEM
WHERE IM.ITEM_LEVEL = 2 AND IM.TRAN_LEVEL = 2 AND IL.STATUS = 'C' AND
IL.LOC = 9999 AND
EXISTS (SELECT 1
FROM ITEM_MASTER IM2 JOIN
ITEM_LOC IL2
ON IM2.ITEM = IL2.ITEM
WHERE IM2.ITEM = IM.ITEM AND
IL2.LOC <> 9999 AND
IL2.STATUS = 'A'
);