Transact-SQL速记连接语法?

All*_*sen 15 sql join

我在处理遗留代码时已经注意到几次,你可以使用.在sql中做左右外连接

=*
Run Code Online (Sandbox Code Playgroud)

作为"右外连接"的简写

*=
Run Code Online (Sandbox Code Playgroud)

作为这样的语句中"左外连接"的简写:

select table1.firstname, table2.lastname
from table1, table2
where table1.id *= table2.id
Run Code Online (Sandbox Code Playgroud)

我猜想还有其他像这两种运算符用于不同类型的连接,但我还没有找到任何关于它的完整文档.所以你知道任何与文档有关的好链接吗?

我个人认为我使用这些运算符看到的SQL语句比使用拼写语法时更难以弄清楚,因此使用速记版本有什么好处吗?

Jam*_*mes 14

=*和*=不符合当前的SQL标准,我相信这些运算符很快就会被弃用,你应该总是使用标准的连接语法.你提到的其他运算符令人困惑,需要消失,当我在数据库对象中看到这些时,我感到畏缩.

  • 但是当代码错误时 - 因为这是(=*或*=会给出错误的结果),你应该在看到代码时替换它. (2认同)

小智 5

它有意外后果的原因是它会将ENTIRE where子句解释为JOIN子句.例:

选择一:

select * from table a left join table b on a.id=b.id
     where b.name = "hello world"
Run Code Online (Sandbox Code Playgroud)

VS

选择二:

select * from table a left join table b on a.id=b.id and b.name = "hello world"
Run Code Online (Sandbox Code Playgroud)

这2个选择返回不同的结果.当你写这样的语句时:

select * from tablea,tableb where tablea.id *= tableb.id and b.name="hello world"
Run Code Online (Sandbox Code Playgroud)

我希望大多数人都希望Select1的结果...但你实际上会得到Select2的结果.