对于MySQL,为什么以下两个sqls都可以正常工作?

时间:2017-06-20 11:14:59

标签: mysql sql

sqls如下:

select T1.a from T1 where T1.b in (select T2.b from T2 where T2.b = 'b' and T1.c = 'c')
select T1.a from T1 where T1.b in (select T2.b from T2 where T2.b = 'b') and T1.c = 'c'

2 个答案:

答案 0 :(得分:0)

第一个是:

select T1.a
from T1
where T1.b in (select T2.b from T2 and T1.c = 'c')

T1的引用是外部查询。这是允许的。事实上,相关子查询需要它,这是SQL语言的一个重要部分。

在这种情况下,第二个版本更为可取。当直接在from

的表格中时,过滤逻辑更容易理解

答案 1 :(得分:0)

第二个条件引用表T1,它是外部查询中的引用。所以你的两个查询都被执行了。你也可以像这样实现你的结果

select T1.a from T1 where T1.c = 'c' and T1.b in (select T2.b from T2 and )

您的第二个条件始终是T1,因此在您的查询中它的位置无关紧要。