首页 > 其他 > 详细

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

时间:2015-04-23 20:03:31      阅读:229      评论:0      收藏:0      [点我收藏+]

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整体

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

原文:http://my.oschina.net/weiwubunengxiao/blog/405648

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!