【发布时间】:2019-06-15 09:52:12
【问题描述】:
我正在处理旧 HR 系统中的一些视图,该系统经常将多个联接放在一起,而联接的“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
此代码只是这种连接类型的示例。
【问题讨论】:
-
我相信它被称为嵌套内连接,但我无法回答为什么有人会这样做。
-
我可以想象,当程序员习惯了旧的逗号连接方式时,可能会发生这种情况,然后被指示使用新的 JOIN 语法。将
select * from x, y, z where x.y_id = y.id and x.z_id = z.id更改为select * from x (join y (join z on x.y_id = y.id) on x.z_id = z.id)对那个人来说比将其更改为正确的select * from x join y on x.y_id = y.id join z on x.z_id = z.id更自然。但它会忽略 JOIN 语法的好处在于它将链接条件与搜索条件分开。 -
说得有道理,很好的侦探工作@LukStorms
标签: sql sql-server tsql join