在一些项目中找到的遗留代码中进行重构。这是针对MSSQL的。问题是,我无法理解为什么我们要使用混合的左右连接并将一些连接条件整理在一起。混合左右连接?为什么?
我的问题是这样的:这不是在某些地方创建隐式内部联接而是在其他地方隐式完全联接?
我,几乎任何东西都可以使用被写入学校刚刚离开(和内/全)或恰到好处(和内/全),但是那是因为我喜欢让事情变得简单,其中可能的。
顺便说一句,我们把所有这些东西对Oracle数据库的工作一样,所以也许有与奥拉工作方式不同的一些优化规则?
举例来说,这里是从查询的一个组成部分:
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
我不得不承认这让我生病看看!通过所有手段转换为所有左连接。 – HLGEM 2009-07-21 21:51:48
我只是吐在我的嘴里 – dotjoe 2009-07-21 22:04:46
我很抱歉将所有的表名转换为TableX。我有一个预感,这是由一个仍然在这里工作的人写的,我不确定她是否读取了stackoverflow,虽然从你的评论中判断你是多么的无情,但我对此表示怀疑。 – Beta033 2009-07-21 22:35:25