如何从子查询结果中选择值
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,您可以在上面的查询中使用内连接而不是左连接。以上是关于如何从子查询结果中选择值的主要内容,如果未能解决你的问题,请参考以下文章