not in 的执行问题!感觉很奇怪!!!
--测试
create table a
(
a1 int,
a2 int
)
create table b
(
b1 int,
b2 int
)
insert into a select 1,11
insert into a select 2,12
insert into b select 1,31
insert into b select 3,32
--这样写竟然没有错误提示!!!
select * from a
where a1 not in (select a1 from b)
为什么呢?
------解决方案--------------------呵呵,
------解决方案--------------------可能是子查询中的列明一旦与表明没关系,就被当作与其对应的那个表里的列
select * from a
where a1 in (select a1 from b)
和
select * from a
where a1 in (select a1)
结果都是
-----------------
1 11
2 12
------解决方案-------------------- select * from a
where a1 in (a1)
结果也是
-----------
1 11
2 12
------解决方案--------------------?????
------解决方案--------------------我运行结果是空,没有返回任何记录
------解决方案--------------------为什么要报错?
------解决方案--------------------有意思
------解决方案--------------------看出来了。。这样都行。。
------解决方案--------------------ms的东西需要理由吗。。。
------解决方案--------------------有意思,为什么呢
------解决方案--------------------select * from a
where a1 in (select a1 from b)
和
select * from a
where a1 in (select a1)
和
select * from a
where a1 in (a1)
结果都是
-----------
1 11
2 12
大胆猜测:
可能是子查询(select a1 from b)中的列名(a1)一旦与字查询中的表名(b)没有对应关系,
那么,这个列(a1)就被当作与其对应的那个表(a)里的列来处理,
所以才得到这个a中的所有记录
相当于:
select * from a
where a1 in (select a1 from a)
------解决方案--------------------给微软打电话~:)
------解决方案--------------------create table a
(
a1 int,
a2 int
)
create table b
(
b1 int,
b2 int
)
insert into a select 1,11
insert into a select 2,12
insert into b select 1,31
insert into b select 3,32
--这样写竟然没有错误提示!!!
select * from a
where a1 not in (select b1 from b)
------解决方案--------------------楼上的。。。
------解决方案--------------------呵呵。。。
------解决方案--------------------生活太平静了
------解决方案--------------------我宁可相信这是一个bug
------解决方案--------------------select * from a
where a1 not in (select a1 from b)
------
where 子句是个永真式吧
狼兄。。。。
------解决方案--------------------