2016-03-22 200 views
1

第一个查询包含所有分区为空的框,第二个包含文件夹。但是,我只希望具有DPERMCONTAINER属性的文件夹等于导致第一个查询的DID。我想只做一个查询来产生所需的结果。如何在查询中使用另一个查询中的列?

SELECT DISTINCT TO_CHAR(S.DID) DID, 
       TO_CHAR(S.DPERMCONTAINER) PERMCONTAINER, 
       S.DBARCODE, 
       S.DDOCTITLE, 
       S.XCOMMENTS, 
       SRM.XCATEGORYID, 
       S.XDIVISION, 
       S.DMEDIATYPE 
FROM PRD64_URMSERVER.EXTITEMS S 
LEFT JOIN PRD64_URMSERVER.EXTITEMSRM SRM ON S.DID = SRM.DID 
WHERE S.XDIVISION IS NULL 
    AND UPPER(S.DMEDIATYPE) = 'BOX'; 

SELECT DISTINCT TO_CHAR(S.DID) DID, 
       TO_CHAR(S.DPERMCONTAINER) PERMCONTAINER, 
       S.DBARCODE, 
       S.DDOCTITLE, 
       S.XCOMMENTS, 
       SRM.XCATEGORYID, 
       S.XDIVISION, 
       S.DMEDIATYPE 
FROM PRD64_URMSERVER.EXTITEMS S 
LEFT JOIN PRD64_URMSERVER.EXTITEMSRM SRM ON S.DID = SRM.DID 
WHERE UPPER(S.DMEDIATYPE) = 'FOLDER'; 
+0

如果你能一些示例数据,并基于该预期的输出,这将是非常有益的。谢谢。 – Utsav

+0

我想要一个符合标准的框列表,并且只需要与这些框相关联的文件夹。 – Charles

回答

1

您可以添加IN()语句:

SELECT DISTINCT TO_CHAR(S.DID) DID, TO_CHAR(S.DPERMCONTAINER) PERMCONTAINER, S.DBARCODE, 
S.DDOCTITLE, S.XCOMMENTS, SRM.XCATEGORYID, S.XDIVISION, S.DMEDIATYPE 
FROM PRD64_URMSERVER.EXTITEMS S 
LEFT JOIN PRD64_URMSERVER.EXTITEMSRM SRM ON S.DID = SRM.DID 
WHERE UPPER(S.DMEDIATYPE) ='FOLDER' 
    AND TO_CHAR(S.DPERMCONTAINER) in(SELECT DISTINCT TO_CHAR(S.DID) 
            FROM PRD64_URMSERVER.EXTITEMS S 
            LEFT JOIN PRD64_URMSERVER.EXTITEMSRM SRM ON S.DID = SRM.DID 
            WHERE S.XDIVISION IS NULL AND UPPER(S.DMEDIATYPE) ='BOX'); 
+0

我收到了错误“太多值”。这也将比较第二个查询中的S.DPERMCONTAINER和第一个查询中的S.DID?因为我只想从第一个查询中列出框的文件夹输出。 – Charles

+0

@Charles这是一个错字,现在就试试吧。并且是多数民众赞成IN()检查 – sagi

+0

我试过这个,它给我的“缺少的表达式”的错误,而不是产生一个文件夹的列表。 (S.DID)DID,TO_CHAR(S.DPERMCONTAINER)PERMCONTAINER,S.DBARCODE,S.DDOCTITLE,S.XCOMMENTS,SRM.XCATEGORYID,S.XDIVISION,S.DMEDIATYPE FROM PRD64_URMSERVER.EXTITEMS S (S.DMIDI)='FOLDER' AND TO_CHAR(S.DPERMCONTAINER)IN S 其中S.XDIVISION是NULL和UPPER(S.DMEDIATYPE)='BOX');' – Charles

相关问题