最終,我試圖刪除重複的行,並保留與更大的數字數據的行。因此,要找到重複的數據,我會用:MySQL:如何找出哪一行具有更大的值?
SELECT * FROM tbl GROUP BY a HAVING COUNT(a)>1
現在,我如何才能找到在field_a
列中的大量的行?
最終,我試圖刪除重複的行,並保留與更大的數字數據的行。因此,要找到重複的數據,我會用:MySQL:如何找出哪一行具有更大的值?
SELECT * FROM tbl GROUP BY a HAVING COUNT(a)>1
現在,我如何才能找到在field_a
列中的大量的行?
也許(排序一種逃避的):
DELETE t
FROM t
EXCEPT (max-query-on-t)
而且考慮當記錄具有相同的最大值。
delete tbl from tbl,
(
select a, max(field_a) as max_a
from tbl
group by a
having count(a)>1
) as max_for_a
where tbl.a=max_for_a.a and tbl.field_a!=max_for_a.max_a;
,如果你有field_a爲每一個兩個或更多更大的價值,就無法刪除所有
來解決這個問題,你需要運行像
select a, count(*) from tbl group by a;
另一個查詢
,併爲每一個
delete from tbl where a=? limit (total_count-1);
要做到這一切在一個查詢中,你需要一個唯一的密鑰,你必須存儲臨時表中的中間結果:
delete from tbl where tbl.id in (select result.id from (select tbl.id from tbl join (select max(a) as a from tbl) as maxa where tbl.a<>maxa.a) as result)
雖然,我會建議將它分成兩個或三個單獨的查詢。
你有沒有試過MAX() - > http://www.tizag.com/mysqlTutorial/mysqlmax.php – Christophe 2011-01-05 08:31:39
這可以幫助我隔離MAX,但我需要刪除除MAX以外的所有內容。我怎樣才能做到這一點? – Strawberry 2011-01-05 08:56:39
DELETE FROM tbl WHERE MAX(a)<> 1(<>表示不是,所以a的最大值不是1)但是在運行該查詢之前先用select進行測試 – Christophe 2011-01-05 09:22:02