gpt4 book ai didi

sql - Oracle (+) 外连接和常量值

转载 作者:行者123 更新时间:2023-12-04 13:59:02 24 4
gpt4 key购买 nike

我遇到了一个问题,我无法弄清楚如何正确配置联接。我正在使用报告软件,该软件利用我们 Oracle 数据库的 WHERE 子句中的 (+) 指标。我有两个表:

检查和交易。一张支票可以有多个交易,但一个交易不一定有对应的支票。

两个表都有标识当前记录的指示器,称为 CURRENT,它是“Y”或“N”。

加入选项1:

Select *
FROM TXN,CHK
WHERE
TXN.CHK_ID = CHK.CHK_ID(+)
and TXN.CURRENT = 'Y'
and CHK.CURRENT = 'Y'

加入选项2:
Select *
FROM TXN,CHK
WHERE
TXN.CHK_ID = CHK.CHK_ID(+)
and TXN.CURRENT = 'Y'
and CHK.CURRENT(+) = 'Y'

这些连接产生不同的结果,我似乎无法弄清楚将额外的外部连接指示符应用于 CHK.CURRENT 字段时会产生什么影响。带有额外指示符的查询会产生更大的结果集。有人可以帮助解释这里发生了什么吗?

最佳答案

我将使用等效的“ANSI JOIN”语法来解释这一点:

选项1

SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
WHERE TXN.CURRENT = 'Y'
AND CHK.CURRENT = 'Y'

选项 2
SELECT *
FROM TXN
LEFT JOIN CHK
ON TXN.CHK_ID = CHK.CHK_ID
AND CHK.CURRENT = 'Y'
WHERE TXN.CURRENT = 'Y'

如您所见,在选项 1 中,常量谓词应用在 LEFT JOIN 之后。指定表表达式,即在 LEFT JOIN 的结果上.

在选项 2 中,常量谓词之一是 LEFT JOIN 的一部分。表达。

怎么样 LEFT JOIN工作?

一个 LEFT JOIN的想法是它将返回 JOIN 左侧的所有行表达式,无论另一侧是否有匹配的行,给定连接谓词。因此,在选项 2 中,无论您是否在 CHK 中找到一行与 CURRENT = 'Y'TXN 中的一行, TXN 中的行仍然返回。这就是您在选项 2 中获得更多行的原因。

此外,这个例子应该解释为什么你应该更喜欢“ANSI JOIN”语法。从维护/可读性的角度来看,您的查询正在做什么更加清晰。

关于sql - Oracle (+) 外连接和常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com