什么是这种类型的连接称为最终合格的连接?

Ran*_*son 5 sql t-sql sql-server join

我正在使用旧的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
Run Code Online (Sandbox Code Playgroud)

此代码只是此类连接的示例.

Gor*_*off 5

没有充分的理由这样做.有inner join,joins的任何顺序都是等价的.几乎每个人都同意以下内容更容易遵循和维护:

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
Run Code Online (Sandbox Code Playgroud)

有一些神秘的情况,重新排列外连接不完全相同.一般来说,inner joins后跟left joins对于我写的几乎所有查询都是足够的.

至于为什么有人会这样写join?我只能推测.我最可能的原因是他们,from子句中使用s 并且只是在连接它们的条件之前更喜欢引用所有表.