我正在尝试跟踪Microsoft Server中的一些SQL。我遇到了一个使用我不熟悉的约定的联接。 “=*
”是什么意思?
WHERE table1.yr =* table2.yr -1
答案 0 :(得分:71)
此:
WHERE t.column =* s.column
...是旧的TSQL(pre SQL Server 2005)外连接语法,并且不是ANSI JOIN。
答案 1 :(得分:25)
我认为这是旧语法,表示从table1到table2的外连接条件
旧式:
SELECT * FROM table1, table2
WHERE table1.yr =* table2.yr -1
新样式(SQL92):
SELECT * FROM table2
LEFT OUTER JOIN table1 ON table1.yr = table2.yr - 1
答案 2 :(得分:16)
这是表达联接的旧样式语法
答案 3 :(得分:11)
这意味着代码需要立即更换!这种样式连接应该是一个正确的连接。不幸的是,它有时会被解释为交叉连接,因此使用此连接的结果可能不正确。此外,此语法已弃用,不能用于下一版本的SQl服务器。
答案 4 :(得分:7)
这是RIGHT OUTER JOIN的ANSI SQL 1989语法,其中* =将是LEFT OUTER JOIN。
您还应该注意,在SQL 2008中不推荐将连接语法放在WHERE子句中。http://scarydba.wordpress.com/2009/09/15/no-join-predicate/< ==关于此的及时文章。
答案 5 :(得分:2)
这是ANSI SQL92中不推荐使用的旧式连接。新语法使用INNER和OUTER JOIN,它们基于表达式而不是相等来连接表
答案 6 :(得分:1)
A ???在WHERE子句中使用符号= *代替=来指定外连接。
答案 7 :(得分:0)
是的,这是左外连接的另一种语法
from table1 left outer join table2 on table1.yr = table2.yr - 1
答案 8 :(得分:0)
SELECT *
FROM table1, table2
WHERE table1.yr =* table2.yr -1
与此相同:
SELECT *
FROM
table2
LEFT OUTER JOIN
table1
ON table1.yr = (table2.yr - 1)
The * syntax is considered outdated,并且不符合ANSI标准。
像这样的Oracle has a similar construct:
WHERE table1.yr (+)= table2.yr
答案 9 :(得分:0)
简单明了。 这是一个SQL-92外连接运算符(more info)
不要使用它,它的旧学校,但它类似于LEFT JOIN和RIGHT JOIN。 它所做的只是告诉连接的哪一侧是“父”方面,因此将首先考虑该方面的行。
如果您尝试在SQL 2005上运行它,它将抛出一个错误,说您需要在兼容模式下运行它。
答案 10 :(得分:-1)
这里有很多愚蠢的答案。你没有给出FROM子句,所以没有办法判断你的* =是表示LEFT还是RIGHT外连接。
WHERE table1.yr =* table2.yr -1
是外连接的旧语法,当然。但任何声称知道它是LEFT还是RIGHT外连接的人都是错误的。它取决于在FROM子句中命名table1和table2的顺序,并且没有给出。