【发布时间】:2016-09-07 07:35:13
【问题描述】:
我在我们的“遗留”代码中遇到了几个存储过程,它们的连接如下所示:
SELECT *
FROM TableA
INNER JOIN TableB
INNER JOIN TableC ON TableC.TableBId = TableB.TableBId
ON TableA.TableAId = TableB.TableAId
我会以不同的方式编写此查询,如下所示:
SELECT *
FROM TableA
INNER JOIN TableB ON TableA.TableAId = TableB.TableAId
INNER JOIN TableC ON TableB.TableBId = TableC.TableBId
结果是一样的,但我发现第二个例子更容易理解,尤其是在有多个连接的情况下。使用ON 子句“延迟”编写JOIN 语句有什么好处,直到所有连接都被指定后,如第一个示例所示?
【问题讨论】:
-
过去的旧代码是否从 Microsoft Access 移植过来?如果我没记错的话,Access 有一些棘手的限制,会在所有
JOIN子句之后将所有ON子句推到末尾。还有括号。已经有一段时间了,所以我不记得确切的语法了。 -
@ShannonSeverance 谢天谢地,我不确定它是否曾经在 Access 中,但如果是的话,我不会感到惊讶。我想我记得 Access 很奇怪。访问.....*颤抖*
标签: sql-server tsql join