您的位置:首页 > 其它

子查询中包含不存在的列--居然不是bug!

2015-04-23 19:36 239 查看
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整体
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐