文档章节

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

威武不能笑
 威武不能笑
发布于 2015/04/23 19:36
字数 189
阅读 130
收藏 10

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
博文 62
码字总数 12743
作品 0
黄浦
程序员
SQL 查询语句中in与not in查出来的条数不是互补的

一、in与not in不是互补的 SQL 查询语句中in与not in查出来的条数不是互补,即用in查出来的条数不等于总数减去not in查出来的条数。 例如:数据库表中有10条记录,用select count() from per...

谢思华
2013/12/11
0
2
MySQL EXPLAIN的输出信息

MySQL EXPLAIN的输出信息 基本用法 explain article; explain select * from article a where a.author_id in (select author_id from user); 第一个相当于desc表结构。 第二个表示select查......

秋风醉了
2015/08/23
0
0
in与exist , not in与not exist 的区别

in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用...

pureboys
2015/01/23
0
0
Mysql中Explain详解

当我们使用索引的时候,通常会用explain来检查我们索引使用的情况。 id列: 这一列总是包含一个编号,标示select所属的行。如果在语句当中没有子查询或联合,那么只会有的select,于是每一个...

扬花落尽丶
2017/11/01
0
0
MySQL explain详解

例子 id SQL执行的顺序的标识 select_type 查询中每个select子句的类型 (1) SIMPLE(简单SELECT,不使用UNION或子查询等) (2) PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为P...

乾坤刀
07/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

函数调用约定 (cdecl stdcall)

函数调用约定 (cdecl stdcall) 在 C 语言里,我们通过阅读函数声明,就知道怎么携带参数去调用函数,也能在函数体定义内使用这些参数。但是 CPU 并不直接完成函数调用的传参操作,这需要人为...

傅易
2分钟前
0
0
Python 核心编程 (全)

浅拷贝和深拷贝 1.浅拷贝:是对于一个对象的顶层拷贝,通俗的理解是:拷贝了引用,并没有拷贝内容。相当于把变量里面指向的一个地址给了另一个变量就是浅拷贝,而没有创建一个新的对象,如a=b...

代码打碟手
5分钟前
0
0
mysql5.7 修改datadir

mysql 的默认存储路径为 /var/lib/mysql ,修改后为 /data/mysql 关闭服务 service mysql stop 复制mysql 数据文件到新的目录 cp -rp /var/lib/mysql /data 查看原目录的权限,如果新目...

hotsmile
21分钟前
0
0
证书安装指引之Tomcat 证书部署

Tomcat 证书部署 0 申请证书 1 获取证书 如果申请证书时有填写私钥密码,下载可获得Tomcat文件夹,其中有密钥库 www.domain.com.jks; 如果没有填写私钥密码,证书下载包的Tomcat文件夹中包括...

吴伟祥
26分钟前
0
0
ConcurrentHashMap1.7和1.8的底层不同实现

1.Hashmap和HashTable在线程安全方面的优劣? Hashmap多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取Entry。 Hash...

刘祖鹏
41分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部