2017-07-28 34 views
2

我有以下4個表下面提及,並試圖從子查詢中提取值ACC_NUMBER值,請幫我優化的正確語法如何從子查詢結果

ACCOUNT TABLE 
------------------------- 
|ACC_NUMBER | ACC_NAME| 
------------------------- 

ACCOUNT_DETAILS TABLE 
--------------------------------- 
|ACC_NUMBER |DEAL_NUMBER|DEAL_TYPE| 
--------------------------------- 

DEALS TABLE 
------------------------------------ 
|DEAL_NUMBER |DEAL_TYPE|DEP_NUMBER | 
------------------------------------ 

DEPARTMENT TABLE 
------------------------ 
|DEP_NUMBER | DEP_NAME | 
------------------------ 

SELECT 
D.DEAL_NUMBER, 
D.D_TYPE, 
DP.DEPARTMENT_NUMBER 
FROM 
DEALS D , DEPARTMENT DP 
WHERE 
D.DEP_NUMBER = DP.DEP_NUMBER 
AND D.DEAL_NUMBER NOT IN 
       (SELECT ACD.DEAL_NUMBER 
        FROM ACCOUNT_DETAILS ACD, ACCOUNT AC 
        WHERE AC.ACC_NUMBER = ACD.ACC_NUMBER 
         AND DEAL_TYPE = 'XXXX' 
         AND ACD.DEAL_NUMBER = D.DEAL_NUMBER) 
+0

別的你之前必須使用'ANSI' sql連接而不是這種舊連接技術 – XING

+2

如果您使用的是「D.DEAL_NUMBER NOT IN」,這意味着記錄連接不存在於ACCOUNT和ACCOUNT_DETAILS表中,那麼您如何獲得ACC_NUMBER來處理特定的交易? –

+0

我想提取ACC_NUMBER在當前語法中的一些變化,但我想在結果中ACC_NUMBER – mahesh

回答

1

喜,如果您使用的是D.DEAL_NUMBER NOT IN這意味着記錄 加入不存在於ACCOUNT和ACCOUNT_DETAILS表中,那麼 從未獲得ACC_NUMBER的特定優惠嗎?

如果你準備做一些改變當前的語法,可以 發揮與加入您的查詢結果得到ACC_NUMBER:

例子:

SELECT 
D.DEAL_NUMBER, 
D.D_TYPE, 
ACD.ACC_NUMBER, 
DP.DEPARTMENT_NUMBER 
FROM 
DEALS D 
join DEPARTMENT DP 
on D.DEP_NUMBER = DP.DEP_NUMBER 
left join ACCOUNT_DETAILS ACD 
on ACD.DEAL_NUMBER = D.DEAL_NUMBER 
join ACCOUNT AC AC.ACC_NUMBER = ACD.ACC_NUMBER 
WHERE DEAL_TYPE = 'XXXX' 
      AND ACD.DEAL_NUMBER = D.DEAL_NUMBER 
+0

感謝您的答覆,以前的要求是選擇與account_details表不關聯的deal_number,現在新的要求是選擇deal_number和account_number – mahesh

+0

我們是否可以通過創建函數來實現這一點? – mahesh

+0

爲什麼要創建函數,如果你可以使用簡單的查詢來實現它。 –