什么= *是什么意思?

我想跟踪微软服务器中的一些SQL。 我遇到了一个使用我不熟悉的约定的join。 “ =* ”是什么意思?

 WHERE table1.yr =* table2.yr -1 

这个:

 WHERE t.column =* s.column 

…是旧的TSQL(pre SQL Server 2005)外部连接语法,而不是ANSI JOIN。

参考: SQL Server 2005外部联接陷阱

我相信这是旧的语法,表示从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 

这是表示连接的旧式语法

这意味着代码需要立即更换! 这种风格的连接应该是一个正确的连接。 不幸的是,它有时会被解释为交叉连接,所以使用这个连接的结果可能不正确。 此外,此语法已被弃用,不能用于intel下一版本的SQl服务器。

这是RIGHT OUTER JOIN的ANSI SQL 1989语法,其中* =将是LEFT OUTER JOIN。

你还应该注意在SQL 2008中不推荐使用连接语法。http://scarydba.wordpress.com/2009/09/15/no-join-predicate/ <==这是一篇及时的文章。

这是ANSI SQL92中不赞成使用的旧式连接方式。 新语法使用INNER和OUTER JOIN,它们根据expression式而不是相等来连接表

一个 ??? 外连接是在WHERE子句中使用symbol = *代替=来指定的。

yeap,这是左外连接的另一个语法

从
在table1.yr = table2.yr  -  1上的table1左外部连接table2
 SELECT * FROM table1, table2 WHERE table1.yr =* table2.yr -1 

意思是这样的:

  SELECT * FROM table2 LEFT OUTER JOIN table1 ON table1.yr = (table2.yr - 1) 

*语法被认为是过时的 ,并不符合ANSI标准。

Oracle有这样一个类似的结构 :

  WHERE table1.yr (+)= table2.yr 

简单明了。 这是一个SQL-92外连接运算符( 更多信息 )

不要使用它,它的老派,但它类似于左连接和右连接。 它所做的只是告诉连接的哪一边是“Parent”边,所以这一边的行将被首先考虑。

如果你尝试在SQL 2005上运行这个,它会抛出一个错误,说你需要在兼容模式下运行这个。

这里有很多愚蠢的答案。 您没有给出FROM子句,因此无法判断您的* =是表示左外还是右外连接。

 WHERE table1.yr =* table2.yr -1 

是外连接的旧语法,当然。 但是任何声称知道它是左或右外连接的人都是错误的。 这取决于table1和table2在FROM子句中的命名顺序,并没有给出。