SQL查询 - SQL Developer

时间:2015-05-11 12:47:45

标签: sql oracle

我遇到以下问题的问题。基本上,下面的查询为我提供了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;

谢谢!

1 个答案:

答案 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'
             );