我们熟悉常用语法:
select col1 from tab1 t1 where not exists(select col2 from tab2 t2 where t2.col2 > t1.col1)
select col1 from tab1 t1 where not exists(select col2 from tab2 t2 where t2.col2 < t1.col1)
现在让我们有一个名为标签的简单表:
col
----------
1
2
3
4
5
6
----------
现在让我们查询:
select col from tab t1 where not exists(select col from tab t2 where t2.col < t1.col)
此查询结果为:1
select col from tab t1 where not exists(select col from tab t2 where t2.col > t1.col)
此查询结果为:6
所以,我想了解MySQL是如何做到这一点的?我对此缺乏理论知识。
答案 0 :(得分:0)
select col from tab t1 where not exists(select col from tab t2 where t2.col < t1.col)
select col from tab t1
选择所有条目,然后选择
中的子查询where not exists(select col from tab t2 where t2.col < t1.col)
选择小于它想要与之匹配的当前条目的每个条目。因此对于第一个查询中的条目1,它没有条目,因为没有小于1的条目,那么
not exists()
启动,因为子查询没有结果,not exists为true,整个查询返回1。
不会返回任何其他值,因为对于任何其他值,您将在子查询中获得结果,从而使not exists()
保留值false