2017-10-15 82 views
0

考虑下面的SQL语句这个不正确(但有效)的SQL连接甚至意味着什么?它究竟在做什么?

select * 
from A 
    inner join B on A.FK = B.PK 
    inner join C on A.FK = B.PK 

这显然是不正确形成陈述。 C的连接使用B的连接条件。但是,这仍然运行。在这种情况下,口译员如何决定加入C?为什么这甚至是被允许的陈述?有没有任何情况下,像这样的东西是可取的?

+0

它是否返回“正确”的数据?对我而言,开发人员看起来像是印刷错误,从不重新验证输出。 – Amit

+0

@Amit - 这不是一个关于具体情况的问题。我想到了这个问题,因为事实上我做了一个复制粘贴错误的事情,我正在努力并纠正它。但是,我注意到SQL语句仍然运行(很长一段时间),我杀了它。问题是“它究竟在做什么,它为什么被允许,并且它是否可取?”。 –

+3

优化器可随意自由裁剪条件。所以这将相当于两个条件(一个是真的)在WHERE部分。至于“它在做什么” - 笛卡尔产品就是它正在做的事情。 –

回答

1

从a到b的连接条件是重复的,只要在关键字后面,它在sql中的位置并不重要。我相信这是事实。

你正在做一个caterian加入到这里加入a的结果。如果a和b连接产生15行,并且c有20,那么结果集为300行。

相关问题