什么= *是什么意思?
我想跟踪微软服务器中的一些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子句中的命名顺序,并没有给出。