繁体   English   中英

DB2的SQL子查询

[英]Sql subquery for DB2

sql查询需要连接4张表,我这样做了,我必须在其中满足条件的列中显示几列。 说这是Where子句中的查询。 现在,我如何编写子查询来显示另一列(ORG_NAME,在ORG_UNIT中),其内容基于查询中Where子句满足的行。 我写了这段代码,但是对我不起作用:

SELECT T33.CONTRACT_NUM, T135.MINOR_ORG_NUM, T96.ORG_TYPE,T22.CFD_FLAG,
  (SELECT T96.ORG_NAME
   FROM ORG_UNIT T96, SUB_UNIT T135
   WHERE T96.ORG_NUMBER IN (T135.MAJOR_ORG_NUMBER)) AS HEAD_ORG_NAME
FROM
   ORG_UNIT T96, SUB_UNIT T135, CUST_CONTRACT T33, CONT_ASSIGNMT T22
WHERE
   T96.ORG_NUMBER = T22.ORG_NUMBER
  AND T22.CTR_SYS_NUM = T33.CTR_SYS_NUM
  AND T96.ORG_NUMBER = T135.MINOR_ORG_NUMBER
  AND T135.RELTN_TYPE = 'HOS'
  AND T22.CFD_FLAG = 'Y'; 

作为记录,T135包含总公司编号(MAJOR_ORG_NUMBER)及其子办事处编号(MINOR_ORG_NUMBER)

在SQL中,使用JOIN根据表的公共列将表“合并”在一起。

这是一个简单的指南,可以为您提供基本思路: SQL JOIN

在SQL中,最好总是绘制要执行的操作,因此请参考此链接以查看“ LEFT JOIN”图片示例: LEFT JOIN

使用“ LEFT JOIN”合并表(其中:ORG_UNIT.ORG_NUMBER = SUB_UNIT.MAJOR_ORG_NUMBER),看起来像这样:

LEFT JOIN SUB_UNIT T135 ON T96.ORG_NUMBER = T135.MAJOR_ORG_NUMBER

在查询中,在“ FROM”之后和“ WHERE”之前放置一个JOIN:

SELECT 
    T33.CONTRACT_NUM,
    T135.MINOR_ORG_NUM,
    T96.ORG_TYPE,
    T22.CFD_FLAG,
    T135.ORG_NAME AS HEAD_ORG_NAME
FROM
    ORG_UNIT T96,
    CUST_CONTRACT T33,
    CONT_ASSIGNMT T22

LEFT JOIN SUB_UNIT T135 ON T96.ORG_NUMBER = T135.MAJOR_ORG_NUMBER

WHERE
    T96.ORG_NUMBER = T22.ORG_NUMBER
    AND T22.CTR_SYS_NUM = T33.CTR_SYS_NUM
    AND T96.ORG_NUMBER = T135.MINOR_ORG_NUMBER
    AND T135.RELTN_TYPE = 'HOS'
    AND T22.CFD_FLAG = 'Y';

请注意,您可以(应该)使用JOIN合并所有表(并避免使用昂贵的WHERE条件):

SELECT 
    T33.CONTRACT_NUM,
    T135.MINOR_ORG_NUM,
    T96.ORG_TYPE,
    T22.CFD_FLAG,
    T135.ORG_NAME AS HEAD_ORG_NAME

FROM
    ORG_UNIT T96

LEFT JOIN SUB_UNIT T135 ON
    T96.ORG_NUMBER = T135.MAJOR_ORG_NUMBER
    AND T96.ORG_NUMBER = T135.MINOR_ORG_NUMBER
LEFT JOIN  ON
    CONT_ASSIGNMT T22 ON T96.ORG_NUMBER = T22.ORG_NUMBER
LEFT JOIN ON 
    CUST_CONTRACT T33 ON T22.CTR_SYS_NUM = T33.CTR_SYS_NUM

WHERE
    T135.RELTN_TYPE = 'HOS'
    AND T22.CFD_FLAG = 'Y';

有几种JOIN类型(左/右/内/外),因此请使用所需的一种。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM