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

Posted

技术标签:

【中文标题】如何从子查询结果中选择值【英文标题】:how to select the value from sub query result 【发布时间】:2017-07-28 09:32:40 【问题描述】:

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

【问题讨论】:

首先你必须使用ANSI sql join 而不是这种旧的连接技术 如果您使用“D.DEAL_NUMBER NOT IN”,这意味着 ACCOUNT 和 ACCOUNT_DETAILS 表中不存在记录连接,您如何期望获得该特定交易的 ACC_NUMBER? 我正在尝试通过对当前语法进行一些更改来提取 ACC_NUMBER,但我希望结果中包含 ACC_NUMBER 【参考方案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

【讨论】:

感谢回复,之前的要求是选择与account_details表没有关联的deal_number,现在新的要求是选择deal_number和account_number 我想我们可以通过创建函数来实现吗? 如果可以使用简单的查询来实现,为什么要创建函数。 如果您只想要与 account_details 表关联的 deal_number,您可以在上面的查询中使用内连接而不是左连接。

以上是关于如何从子查询结果中选择值的主要内容,如果未能解决你的问题,请参考以下文章

如何从子查询中获取结果作为查询中的参数

如何使用 laravel 5 中的查询生成器从子查询中进行选择

ORACLE 子查询 嵌套查询 多值子查询

如何从子查询中只获取一行?

从子查询中保存价值并在以后重用它?

Oracle - 如何从子查询中返回平均值?