3

我只是好奇为什么*=运算符 forleft outer join和 '=*' for 'right outer join 被从 SQL 标准中取出,或者,至少 SQL Server 2005 及更高版本不支持?我已阅读有关此特定运算符的其他一些帖子,并了解它可能会产生一些意想不到的结果。但是,如果它在语义上是等效的,我认为在必须连接多个表时使用它会更容易。如果有的话,我宁愿使用这个运算符来动态创建 sql 查询,而不是试图获得正确的词序,例如:

FROM accounts 
LEFT OUTER JOIN customers 
ON accounts.accountnum = customers.accountnum 
LEFT OUTER JOIN products 
ON customers.accountnum = products.accountnum 
AND customers.id = products.customerid  

在哪里

FROM accounts, customers, products
WHERE accounts.accountnum *= customers.accountnum AND
      customers.accountnum *= products.accountnum AND
      customers.id *= products.customer.id

似乎更容易一起解析。

但回到现实世界,如果这些运算符不执行“真正的”外连接,他们的想法是什么?Short Hand 一词意味着它应该做完全相同的事情,但在这种情况下显然不是。

4

3 回答 3

5

SQL Server MVP K. Brian Kelley 在这里做了很好的解释:Why SQL Server 2005 doesn't Permit Non-ANSI Style OUTER JOINs

于 2011-10-28T20:38:41.680 回答
1

谷歌搜索 Chris Date 论文“Outer Join with No Nulls and Fewer Tears”,它早于 SQL-92 标准。虽然我在网上找不到免费的副本,但我确实找到了一篇分析论文的文档,并给出了 SQL 中外连接的一个很好的盆栽历史。请注意,现在 Date 会为这种查询提供关系值属性,并会敦促您通常避免外连接;)

于 2011-10-31T13:41:09.977 回答
1

我不认为他们被排除在标准之外。我认为他们从未参与其中。它们只是供应商遵循的约定,直到 SQL-92 出现并且供应商认为值得实施。

于 2011-10-28T20:45:36.523 回答