SQL 删除表中重复的数据

[复制链接]
查看11 | 回复3 | 2011-6-7 15:37:00 | 显示全部楼层 |阅读模式
delete from 事件状态查询 where (设备编号,故障恢复日期,故障恢复时间) exists
(select 设备编号,故障恢复日期,故障恢复时间 from 事件状态查询
group by 设备编号,故障恢复日期,故障恢复时间 having COUNT(*)>1)
and 故障恢复时间 not exists (select MIN(故障恢复时间) from 事件状态查询
group by 设备编号,故障恢复日期,故障恢复时间 having COUNT(*)>1)
消息 4145,级别 15,状态 1,第 1 行
在应使用条件的上下文(在 ',' 附近)中指定了非布尔类型的表达式。
消息 156,级别 15,状态 1,第 4 行
关键字 'and' 附近有语法错误。
当改为:
delete from 事件状态查询 a where (a.设备编号,a.故障恢复日期,a.故障恢复时间) exists
(select 设备编号,故障恢复日期,故障恢复时间 from 事件状态查询
group by 设备编号,故障恢复日期,故障恢复时间 having COUNT(*)>1)
and 故障恢复时间 not exists (select MIN(故障恢复时间) from 事件状态查询
group by 设备编号,故障恢复日期,故障恢复时间 having COUNT(*)>1)
错误提示为:
消息 102,级别 15,状态 1,第 1 行
'a' 附近有语法错误。
消息 156,级别 15,状态 1,第 4 行
关键字 'and' 附近有语法错误。

回复

使用道具 举报

千问 | 2011-6-7 15:37:00 | 显示全部楼层
1、exist不是这样用的。它后面跟一个查询语句,前面无内容,表示一个条件EXISTS 是判断是否存在,和in类似,但效率要比in高例:SELECT * FROMEMP (基础表)WHERE EXISTS (SELECT ‘X'FROM DEPTWHEREDEPT.DEPTNO = EMP.DEPTNOANDLOC = ‘MELB')2、你的删除语句逻辑也有误,好好琢磨一下吧,你匿名提问了,不然我还可以和你探讨一二。...
回复

使用道具 举报

千问 | 2011-6-7 15:37:00 | 显示全部楼层
--给分吧,没啥说的!delete from 事件状态查询 a where rowid(select min(rowid)
from 事件状态查询
where 设备编号 = a.设备编号
and 故障恢复日期 = a.故...
回复

使用道具 举报

千问 | 2011-6-7 15:37:00 | 显示全部楼层
exists前面不加列名,加列名的那是in...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行