从重复记录中删除单个值

时间:2015-01-15 14:45:12

标签: mysql sql mysqli

我有一个分析表repquest

   -------------------------
    id |  test | request_id |
    -------------------------
    1  |   a   |NDQA201404320
    -------------------------
    2  |   a   |NDQA201404320    
    -------------------------
    3  |   b   |NDQA201404333  
   -------------------------
    4  |   b   |NDQA201404333

我如何删除包含'NDQA201404320'的记录的任何副本,并且只保留一条相同的记录, 建议。

3 个答案:

答案 0 :(得分:2)

一般来说,你可以做到

delete from analyst_request
where id not in
(
   select min(id) 
   from analyst_request
   where request_id IN ( 'NDQA201404320')
   group by test, request_id 
)

但MySQL无法从您选择的同一个表中删除。所以你需要制作一个这样的临时表

delete from analyst_request
where id not in
(
   select * from 
   (
      select min(id) 
      from analyst_request
      where request_id IN ( 'NDQA201404320')
      group by test, request_id 
   ) tmp
)

答案 1 :(得分:1)

为什么不将其设为unique字段,并防止重复进入数据库?

答案 2 :(得分:1)

我无法对juergen的回答发表评论,但是如果你想引用某个request_id,那么你可以在内部select语句中添加它作为WHERE子句,如此

select min(id) 
from analyst_request
where request_id IN ( 'NDQA201404320', 'NDQA201404333' )
group by test, request_id 

希望能帮助您和我正确理解您的问题。除此之外,我认为juergen的回答是正确的。