我有一个分析表repquest
-------------------------
id | test | request_id |
-------------------------
1 | a |NDQA201404320
-------------------------
2 | a |NDQA201404320
-------------------------
3 | b |NDQA201404333
-------------------------
4 | b |NDQA201404333
我如何删除包含'NDQA201404320'的记录的任何副本,并且只保留一条相同的记录, 建议。
答案 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的回答是正确的。