2017-07-28 66 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

为什么要创建函数,如果你可以使用简单的查询来实现它。 –