有如下的语句:
declare @Subs table(id int,i_parentid int)
declare @Subs1 table(id int,i_parentid int)--这里的subs和subs1的结构是一样的。
insert into @Subs values(1,0)
insert into @Subs values(2,1)
insert into @Subs values(3,1)
insert into @subs1 select * from @subs
当执行:
delete @subs where exists(select * from @subs1 as e2 where e2.i_parentid=id)
怎么都删不掉第一行(按理说第一行应被删掉),这是什么???
当执行:
select * from @subs where exists(select * from @subs1 as e2 where e2.i_parentid=id)
一条记录都查询不出来(按理说第一行应被查询出来),这是为什么??
原来。在exists里面的查询中,由@subs1也有一个列叫id,在where后面的那个id被sql server当成是@subs1的id,而不是@subs的id。所以出来不想要的结果。
解决办法就是将@subs1中的第一个列名改过来,如:改成id1,结果就正常了。
这也就解释清楚为什么用delete删除数据时,最好不要用连接。例如:
delete @subs from @subs e2 where e2.i_parentid<>id --结果是要么全删除,要么一条都删除不掉。
阅读(370) | 评论(0) | 转发(0) |