如何从子查询结果中选择值

时间:2017-07-28 09:32:41

标签: sql oracle subquery

我有下面提到的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)

1 个答案:

答案 0 :(得分: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