= *是什么意思?

时间:2009-09-15 16:14:27

标签: sql sql-server database tsql

我正在尝试跟踪Microsoft Server中的一些SQL。我遇到了一个使用我不熟悉的约定的联接。 “=*”是什么意思?

WHERE table1.yr =* table2.yr -1

11 个答案:

答案 0 :(得分:71)

此:

WHERE t.column =* s.column

...是旧的TSQL(pre SQL Server 2005)外连接语法,并且不是ANSI JOIN。

参考:SQL Server 2005 Outer Join Gotcha

答案 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的顺序,并且没有给出。