当前位置:  开发笔记 > 数据库 > 正文

从语句中删除别名的表变量

如何解决《从语句中删除别名的表变量》经验,为你挑选了2个好方法。

我想根据同一个表中其他行的存在从SQL Server 2000/2005表变量中删除行(如果存在具有相同日期的非0计数行,则删除所有0个计数行).这是一个简单的示例,应该只删除首先添加的行:

declare @O table (
    Month datetime,
    ACount int NULL
)

insert into @O values ('2009-01-01', 0)
insert into @O values ('2009-01-01', 1)
insert into @O values ('2008-01-01', 1)
insert into @O values ('2007-01-01', 0)

delete from @O o1
where ACount = 0
  and exists (select Month from @O o2 where o1.Month = o2.Month and o2.ACount > 0)

问题是我无法让SQL服务器接受表变量的o1别名(我认为由于o1.Month = o2.Month匹配字段名称而需要别名).错误是:

Msg 102,Level 15,State 1,Line 11

'o1'附近的语法不正确.

dance2die.. 52

FROM语句之前指定别名.含义,您要从别名表中删除.

delete o1
from   @O as o1
where  ACount = 0 
       and exists ( select  Month 
                    from    @O o2 
                    where   o1.Month = o2.Month 
                            and o2.ACount > 0)


结果

替代文字



1> dance2die..:

FROM语句之前指定别名.含义,您要从别名表中删除.

delete o1
from   @O as o1
where  ACount = 0 
       and exists ( select  Month 
                    from    @O o2 
                    where   o1.Month = o2.Month 
                            and o2.ACount > 0)


结果

替代文字



2> Joe Pineda..:

试试这个,它应该工作(第一个FROM是可选的):

DELETE [FROM] @O
FROM @O o1
where ACount = 0
and exists (select Month from @O o2
      where o1.Month = o2.Month and o2.ACount > 0)

基本原理是:DELETE,如这里所解释的,首先需要一个非别名表,一个可选的FROM可以在它之前.之后,如果需要执行JOIN,子查询等,可以在第二个FROM中的表上放置别名.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有