子查询中包含不存在的列--居然不是bug!
子查询中包含不存在的列--居然不是bug!
威武不能笑 发表于3年前
子查询中包含不存在的列--居然不是bug!
  • 发表于 3年前
  • 阅读 130
  • 收藏 10
  • 点赞 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整体

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 2
博文 60
码字总数 12743
×
威武不能笑
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: