子查询中包含不存在的列--居然不是bug!
2015-04-23 19:36
239 查看
1.现象
其中,col_a只存在于table_a中,table_b中没有该字段,整条语句的结果是可以成功执行!
2.原因:
这个问题比较困惑,网上搜到的原因是“当子查询中的列名不存在时,自动向外层寻找”。
也就是说,上面的查询实际上被解释成了
相当于自动屏蔽了子查询的约束条件。
3.修改:
为了避免这种情况发生,需要先保证子查询中的SQL能够正确运行,再查看SQL整体
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整体
相关文章推荐
- Oracle数据库报bug,表或试图不存在,表名中包含空格
- IN、EXISTS和LEFT JOIN,NOT IN、NOT EXISTS和INNER JOIN在存在与不存在的查询效率
- 程序员最大的绝望或许并不是电脑里的bug……
- sql查询字段中是否包含数字
- 世界上最遥远的距离不是生与死,而是你亲手制造的 BUG 就在你眼前,你却怎么都找不到她……
- solr facet查询及solrj 读取facet数据【facet.prefix应用:搜索引擎拼写提示(也可用suggest);Solr 默认 requestHandler已包含 Facet 组件】
- 《C专家编程》学习笔记(这不是BUG,而是语言特性)
- Django查询一个权限中包含哪些用户
- 再锻炼,有新发现 Math.random() * n vs Random.nextInt(): 这不是Bug?
- 一个查询字符串中包含的最长的数字子串的函数
- 角色包含权限的一些查询语句
- Hive中LIKE查询使用通配符'%'的一个BUG--当转义符'\'遇到通配符'%'或'_'
- DetachedCriteria查询出包含一个null的数组
- MMC 不能打开文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版
- [C] sizeof居然不是函数是运算符
- Oracle -- left join查询结果不是左表的全部数据的解决方法
- 小心了!不是BUG甚是BUG的正则
- SQL Server 中一个有关聚合函数和子查询的Bug
- 如果说这个世界不是真实存在的,只是一段代码,迄今为止你发现了哪些bug?
- 《C专家编程》笔记一:第二章 这不是Bug,而是语言特性