=*是什么意思?

Sha*_*n H 58 sql t-sql database sql-server

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

WHERE table1.yr =* table2.yr -1
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 71

这个:

WHERE t.column =* s.column
Run Code Online (Sandbox Code Playgroud)

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

参考:SQL Server 2005外部联接

  • 从技术上讲,它是SQL Server 7之前的版本. (10认同)

Eri*_*lje 25

我相信这是旧语法,表示从table1到table2的外连接条件

老式:

SELECT * FROM table1, table2
WHERE table1.yr =* table2.yr -1
Run Code Online (Sandbox Code Playgroud)

新风格(SQL92):

SELECT * FROM table2 
LEFT OUTER JOIN table1 ON table1.yr = table2.yr - 1
Run Code Online (Sandbox Code Playgroud)

  • 实际上你的例子不正确.如果你真的想要使用左外连接,它将是SELECT*FROM**table2**LEFT OUTER JOIN**table1**ON table1.yr = table2.yr-1 (2认同)

mjv*_*mjv 16

这是表达联接的旧样式语法

  • @mjv:我认为获得无脑的代表更容易,因为对于更多的人来说,这比一些深奥的东西更清楚.观众人数越多,获得更多选票的机会就越大. (3认同)
  • @victor hugo我还是新手,请善待.老实说,我首先排除了这一个,只是试图帮助.有趣的是,我偶然发现了这一点,就是我们为这些没有脑子的人提供了更多的代表,而不是更强硬的问题.顺便说一下,为什么你会对这个问题进行挑逗,而后来的反应者与那些具有更高的代表/更长的SO会员资格? (2认同)

HLG*_*GEM 11

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

  • 对于那些对此投降的人,我说这是因为当前代码是任何标准都不正确,因为即使早在SQL Server 2000中也无法保证正确的结果.它甚至声明此代码在SQL Server 2000的联机丛书中具有不一致的结果.离开它是代码库将是风险和不专业. (4认同)

Bry*_* S. 7

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

您还应该注意,在SQL 2008中不推荐将连接语法放在WHERE子句中.http://scarydba.wordpress.com/2009/09/15/no-join-predicate/ <==关于此的及时文章.