给定一个与此类似的表,名为VehicleUser:
VehicleUserId | VehicleId | UserId
1%以上的时间段,*|1001*|2
2%*|1001*|2
3%以上的时间段:*|2
4%*|3。
5%*|3。
6%*|3。
如何编写可以删除重复项的查询?除了不同的VehicleUserId之外,行2和3与行1相同,而除了不同的VehicleUserId之外,行5和6与行4相同。
发布于 2011-01-26 00:26:35
;with cte as (
select row_number() over
(partition by VehicleId, UserId order by VehicleUserId) as rn
from VehicleUser)
delete from cte
where rn > 1;发布于 2011-01-26 00:24:53
您可以使用exists子句过滤重复项,如下所示:
delete v1
from VehicleUser v1
where exists
(
select *
from VehicleUser v2
where v1.VehicleId = v2.VehicleId
and v1.UserId = v2.UserId
and v1.VehicleUserId > v2.VehicleUserId
)在运行此命令之前,请通过将delete替换为select来检查它是否正常工作
select *
from VehicleUser v1
where exists
(
...显示的行将被删除。
发布于 2011-01-26 00:29:09
以下是您独特的值:
select vehicleid, userid, min(vehicleuserid) as min_id
from vehicleuser
group by vehicleid, userid您可以在删除任何内容之前将它们放入一个新表中,以确保拥有您想要的内容,然后删除vehicleUser或使用外部连接从vehicleUser中删除不在新表中的行。
在删除行之前进行调试更安全。
https://stackoverflow.com/questions/4796023
复制相似问题