--测试
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 子句是个永真式吧
狼兄。。。。
------解决方案--------------------