删除除查询返回的行以外的所有行

时间:2020-05-03 16:33:40

标签: mysql sql

我错误地将重复项插入数据库。我建立了查询,该查询返回了我想保留的所有行ID。如何删除查询中未给出的行。您能在答案中包含完整的查询吗?

select min(matches.`id`)from matches
where  (stream_match_time, track_match_time, user_id, track_id ) in (
  select stream_match_time, track_match_time, user_id, track_id 
  from   matches
  group  by stream_match_time, track_match_time, user_id, track_id 
  having count(*) > 1
)
group  by stream_match_time, track_match_time, user_id, track_id 

1 个答案:

答案 0 :(得分:2)

您可以使用:

delete from matches where id not in (...)

但是您必须像这样将查询嵌套更深一层:

delete from matches
where id not in (
  select id from (
    select min(id) id from matches
    where  (stream_match_time, track_match_time, juked_user_id, track_id ) in (
      select stream_match_time, track_match_time, juked_user_id, track_id 
      from   matches
      group  by stream_match_time, track_match_time, juked_user_id, track_id 
      having count(*) > 1
    )
    group by stream_match_time, track_match_time, juked_user_id, track_id 
  ) t
)

我认为您的查询不需要2级汇总,因此请尝试以下操作:

delete from matches
where id not in (
  select id from (
    select min(id) id 
    from   matches
    group by stream_match_time, track_match_time, juked_user_id, track_id 
    having count(*) > 1
  ) t
)