1.现象
create table a as (select 1 as col_a); create table b as (select 2 as col_b) select * from a where col_a in (select col_a from b)
其中,col_a只存在于table_a中,table_b中没有该字段,整条语句的结果是可以成功执行!
2.原因:
这个问题比较困惑,网上搜到的原因是“当子查询中的列名不存在时,自动向外层寻找”。
也就是说,上面的查询实际上被解释成了
select * from a where col_a in (col_a)
相当于自动屏蔽了子查询的约束条件。
3.修改:
为了避免这种情况发生,需要先保证子查询中的SQL能够正确运行,再查看SQL整体
时间: 2024-11-08 14:09:59