视图设计器奇怪的连接语法

gre*_*egn 7 sql-server syntax ssms t-sql view

我有一个数据仓库,里面有很多用 SSMS 视图设计器内置的视图。查看语法,FROM我无法理解这些子句,因为ON语句没有紧跟在相关的JOIN <table>. 通常RIGHT连接查询的主表并在FROM. 所以我有这样的情况:

SELECT *
FROM tableC
LEFT JOIN TableB
RIGHT JOIN TableA
ON TableA.ID = TableB.ID
ON TableB.TypeID = TableC.TypeID 
WHERE ....
Run Code Online (Sandbox Code Playgroud)

将各种JOINandON子句的顺序更改为我手写的内容会以意想不到的方式改变结果。似乎大多数 SQL 美化者都对这种丑陋的语法感到窒息,而 SSMS 则不然。我一直无法找到押韵、原因或文档来帮助解开正在发生的事情。

请提供任何建议或链接以找出和修复视图设计器查询?

Pau*_*ite 11

这只是删除了可选括号的标准 SQL 连接语法:

SELECT *
FROM tableC
LEFT JOIN 
(
    TableB
    RIGHT JOIN TableA
        ON TableA.ID = TableB.ID
)
ON TableB.TypeID = TableC.TypeID
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢 SSMS 视图设计器生成的语法(它有缺陷并且很少更新),只需使用常规 T-SQL 手动编写视图。

有些人将这种语法风格称为“嵌套连接语法”。示例博客文章