[英]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.