/*
测试in运算容易出错的一种情况,就是在子查询中的查询列实际不存在,会返回所有数据。
*/
create table t_1(uid int)
create table t_2(id int)
insert into t_1
select 1
union all
select 2
union all
select 3
union all
select 4
insert into t_2
select 1
union all
select 2
union all
select 7
union all
select 8
select * from t_1 where uid in (select [uid] from t_2 where id like '[0-9]')
drop table t_1,t_2
/**//*
从例子中能够看出,子查询中如果使用本来不存在的列,如果编译没报错的话,查询的结果是错误的,并且不会有任何提示。还有就是子查询中的这个列名,并不是随便写就行,要重现这个错误,需要这个列名在t_1表中存在。
当然,如果单独执行select [user_id] from t_2 where id like '[0-9]' ,就会报错:
消息207,级别16,状态1,第26 行
列名'user_id' 无效。
*/
评论 {{userinfo.comments}}
{{child.content}}
{{question.question}}
提交