2015-01-15 113 views
0

删除单个值我有一个表analyst_request从重复记录

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

如何我刚刚删除包含“NDQA201404320”记录的任何重复,只留下一个相同, 建议纪录。

+0

http://stackoverflow.com/questions/14046355/how-do-i-delete-all-the-duplicate-records-in-a-mysql-table-without-temp-tables – favoretti

回答

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 
) 
+0

如果我想要引用某个request_id,而不是一般的记录? – alphy

+0

你是说如果你只关心重复的'request_id'而不是'test'列?然后从查询中删除'test'列,你会没事的。 –

+0

我的意思是删除是一次一个,我可以选择删除有重复测试='a'的地方,然后下一次有测试='b'的地方,所以我想知道如何应用WHERE ='a'或'b',同时删除重复值 – alphy

1

为什么不让它unique领域,防止重复进入数据库摆在首位?

1

我不能评论对克林斯曼D的答案,但如果你想引用某REQUEST_ID,那么你想补充一点,作为一个WHERE子句中的内SELECT语句,像这样

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

希望帮助你我正确理解你的问题。除此之外,我认为juergen的答案是正确的。

+0

非常感谢您的建议 – alphy