Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18921
  • 博文数量: 5
  • 博客积分: 586
  • 博客等级: 中士
  • 技术积分: 195
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-25 10:43
文章分类
文章存档

2010年(1)

2009年(2)

2008年(2)

我的朋友
最近访客

分类: 数据库开发技术

2010-01-20 18:11:37

有如下的语句:
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) |
0

上一篇:最近碰到的linux问题

下一篇:没有了

给主人留下些什么吧!~~