我有下面提到的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 :(得分: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