我正在处理旧 HR 系统中的一些 View ,该系统经常将多个联接放在一起,并且联接的“ON”部分直到最后才会出现。为什么有人会这样做,这样做有什么好处吗?当其中有大量连接时,我发现它很困惑。我无法很好地描述网络搜索中的情况来帮助我。
SELECT
ExportTypeIdNo = et.ExportTypeIdNo,
ExportDataStoredProcedureIdNo = et.ExportDataStoredProcedureIdNo,
ExportDataStoredProcedure = sp1.Name,
ExportFileStoredProcedureIdNo = et.ExportFileStoredProcedureIdNo,
ExportFileStoredProcedure = sp2.Name
FROM tSTORED_PROCEDURES sp2 INNER JOIN
(tSTORED_PROCEDURES sp1 INNER JOIN
(tEXPORT_TYPES et INNER JOIN tTYPE_CODES tc
ON et.ReportingTreeIdNo = tc.TypeCodeIdNo)
ON sp1.StoredProcedureIdNo = et.ExportDataStoredProcedureIdNo)
ON sp2.StoredProcedureIdNo = et.ExportFileStoredProcedureIdNo
此代码只是此类连接的示例。
最佳答案
没有充分的理由这样做。对于内部联接
,联接
的任何顺序都是等效的。几乎每个人都会同意以下内容更容易遵循和维护:
FROM tEXPORT_TYPES et INNER JOIN
tTYPE_CODES tc
ON et.ReportingTreeIdNo = tc.TypeCodeIdNo INNER JOIN
tSTORED_PROCEDURES sp1
ON sp1.StoredProcedureIdNo = et.ExportDataStoredProcedureIdNo INNER JOIN
tSTORED_PROCEDURES sp2
ON sp2.StoredProcedureIdNo = et.ExportFileStoredProcedureIdNo
在某些神秘的情况下,重新排列外连接并不完全等效。不过,一般来说,内连接
后跟左连接
足以满足我编写的几乎所有查询。
至于为什么有人会这样写join
?我只能推测。我最可能的原因是他们在 from
子句中使用 ,
,并且只是越来越喜欢在连接它们的条件之前引用所有表。
关于sql - 这种类型的连接在最后被限定时被称为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54299593/