我正在尝试跟踪 Microsoft Server 中的一些 SQL。我遇到了一个使用我不熟悉约定的连接(join)。"=*
" 是什么意思?
WHERE table1.yr =* table2.yr -1
我正在尝试跟踪 Microsoft Server 中的一些 SQL。我遇到了一个使用我不熟悉约定的连接(join)。"=*
" 是什么意思?
WHERE table1.yr =* table2.yr -1
这个:
WHERE t.column =* s.column
这是旧的 TSQL(即 SQL Server 2005 之前)外连接语法,不是 ANSI JOIN。
SELECT * FROM table1, table2
WHERE table1.yr =* table2.yr -1
新风格(SQL92):
SELECT * FROM table2
LEFT OUTER JOIN table1 ON table1.yr = table2.yr - 1
这是一种用于表达连接的旧式语法
这意味着代码需要立即替换!这种样式的连接应该是正确连接。不幸的是,有时它会被解释为交叉连接,因此使用这种连接的结果可能不正确。此外,这种语法已被弃用,不能在下一个版本的SQL服务器中使用。
这是 ANSI SQL 1989 右外连接的语法,其中 *= 就是左外连接。
需要注意的是,在 SQL 2008 中,在 WHERE 子句中放置连接语法已被弃用。 http://scarydba.wordpress.com/2009/09/15/no-join-predicate/ <== 这篇文章及时地提到了这一点。
使用符号=*代替WHERE子句中的=,可以指定一个??外连接。
SELECT *
FROM table1, table2
WHERE table1.yr =* table2.yr -1
意思与此相同:
SELECT *
FROM
table2
LEFT OUTER JOIN
table1
ON table1.yr = (table2.yr - 1)
星号语法已经过时, 不符合ANSI标准。
WHERE table1.yr (+)= table2.yr
说得简单明了。 这是一个SQL-92外连接运算符(更多信息)
不要使用它,它非常老旧,但它类似于LEFT JOIN和RIGHT JOIN。 它所做的就是告诉连接的哪一侧是“父”侧,因此该侧的行将首先被考虑。
如果您尝试在SQL 2005上运行此操作,它会抛出一个错误,提示您需要以兼容模式运行此操作。
没错,这是左外连接的另一种语法
从 table1 左外连接 table2 on table1.yr = table2.yr - 1