1

好的,我目前的任务是维护最近迁移到 2008 [R2] 的旧版 SQL Server 2005 数据库,并且有一些类似于以下内容的存储过程:

SELECT 
   @val = c.TableVal
FROM
   dbo.TaqbleA a
   LEFT JOIN dbo.TableB b
       ON a.TableId = b.TableId
   ,dbo.TableC c
WHERE
  a.TableId = c.TableId

拳头我知道表 A 和 B 的连接条件是正常的,我将如何重写它,但我想知道表 C 是否被视为 LEFT JOIN,因为它在 LEFT JOIN 之后列出,或者如果它被视为 INNER JOIN?我的直觉说它被视为 INNER JOIN,但我不确定。它是哪一个?

此外,我知道我不是唯一一个见过这样的东西的人,最好让这个答案在 StackExchange 中永垂不朽......

谢谢。

4

1 回答 1

1

它实际上是一个INNER JOINor CROSS JOIN; 逗号的优先级低于显式JOIN,因此FROM ... LEFT JOIN ... ON ..., ...意味着FROM (... LEFT JOIN ... ON ...), ...LEFT JOIN仅与前两个表有关。

于 2013-06-18T18:58:49.933 回答