gpt4 book ai didi

sql - 混合左连接和右连接?为什么?

转载 作者:行者123 更新时间:2023-12-04 22:41:00 25 4
gpt4 key购买 nike

对我在项目中发现的一些遗留代码进行一些重构。这是针对 MSSQL 的。问题是,我不明白为什么我们要使用混合的左连接和右连接并将一些连接条件整理在一起。

我的问题是:这不会在某些地方创建隐式内部联接而在其他地方创建隐式完全联接吗?

我认为几乎任何东西都可以用 just left(和 inner/full)或 just right(和 inner/full)来写,但那是因为我喜欢尽可能保持简单。

顺便说一句,我们将所有这些东西都转换为在 oracle 数据库上工作,所以也许有一些优化规则与 Ora 不同?

例如,这是其中一个查询的 FROM 部分:

        FROM    Table1
RIGHT OUTER JOIN Table2
ON Table1.T2FK = Table2.T2PK
LEFT OUTER JOIN Table3
RIGHT OUTER JOIN Table4
LEFT OUTER JOIN Table5
ON Table4.T3FK = Table5.T3FK
AND Table4.T2FK = Table5.T2FK
LEFT OUTER JOIN Table6
RIGHT OUTER JOIN Table7
ON Table6.T6PK = Table7.T6FK
LEFT OUTER JOIN Table8
RIGHT OUTER JOIN Table9
ON Table8.T8PK= Table9.T8FK
ON Table7.T9FK= Table9.T9PK
ON Table4.T7FK= Table7.T7PK
ON Table3.T3PK= Table4.T3PK
RIGHT OUTER JOIN ( SELECT *
FROM TableA
WHERE ( TableA.PK = @PK )
AND ( TableA.Date BETWEEN @StartDate
AND @EndDate )
) Table10
ON Table4.T4PK= Table10.T4FK
ON Table2.T2PK = Table4.T2PK

最佳答案

我会做的一件事是确保你在搞砸之前知道你期望的结果是什么。不想“修复”它并返回不同的结果。老实说,对于设计不佳的查询,我不确定您现在是否真的得到了正确的结果。

对我来说,这看起来像是某人随着时间的推移所做的事情,甚至可能最初是从内部联接开始的,意识到它们不起作用并更改为外部联接但不想费心更改查询中引用表的顺序。

出于维护目的,我特别关心的是将 ON 子句放在要连接的表旁边,并将所有连接转换为左连接,而不是混合右连接和左连接。将表 4 和表 3 的 ON 子句放在表 9 旁边对我来说完全没有意义,并且应该导致混淆查询实际应该返回什么。您可能还需要更改联接的顺序以转换为所有左联接。就个人而言,我更喜欢从其他人将加入的主表(看起来是表 2)开始,然后从那里沿着食物链向下移动。

关于sql - 混合左连接和右连接?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1161762/

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