以典型的左外连接场景为例。我们都知道表格的顺序非常重要,例如,Q1和Q2是不等价的:
SELECT A.x, B.y FROM A LEFT OUTER JOIN B ON A.id = B.id -- (Q1)
SELECT A.x, B.y FROM B LEFT OUTER JOIN A ON B.id = A.id -- (Q2)
当我从概念上考虑多重连接时,我通常会很自然地想象将新表作为感兴趣的对象,然后描述其行与之前的行之间的关系。保持条款并行对我没有任何好处,根据我自己的习惯,我通常这样编写连接条件:
SELECT A.x, B.y FROM A LEFT OUTER JOIN B ON B.id = A.id -- (Q3)
我与一位误解了语法如何工作的前同事进行了交谈。对这位同事来说,Q3是错的,Q1是对的。而且我确实认识到,对于旧式外连接语法,这很重要,这很可能是造成这种混乱的根源。我从未听说过或见过其他人使用 ANSI 联接提出这种情况。请回答这个问题并挽回我的声誉,指出我忽略的一些事情,或者对错误的观点提供更深入的见解。
表达式或谓词的顺序对标准 SQL 中的外连接和 ANSI 连接的连接条件有什么不同吗?