如何刪除此設置中的重複項?Mysql重複行(使用2列檢測到重複)
id A B
----------------
1 apple 2
2 orange 1
3 apple 2
4 apple 1
在這裏我想刪除(蘋果,2)發生兩次。身份證號碼是唯一的。如果不是,我會使用DISTINCT關鍵字。我可以做些什麼如何使列A和B的關鍵,然後使用DISTINCT關鍵字來獲得我所需要的?非常感謝您的回覆。
如何刪除此設置中的重複項?Mysql重複行(使用2列檢測到重複)
id A B
----------------
1 apple 2
2 orange 1
3 apple 2
4 apple 1
在這裏我想刪除(蘋果,2)發生兩次。身份證號碼是唯一的。如果不是,我會使用DISTINCT關鍵字。我可以做些什麼如何使列A和B的關鍵,然後使用DISTINCT關鍵字來獲得我所需要的?非常感謝您的回覆。
delete from myTable
where id not in
(select min(id)
from myTable
group by A, B)
即即括號中的選項返回每個A和B分組的第一個ID;刪除不在此集合中的所有id將刪除A-plus-B組合的所有出現,這些組合是「第一次出現」的「後續」。
編輯:這個語法似乎是有問題的:見bug報告:
http://bugs.mysql.com/bug.php?id=5037
可能的解決方法是做到這一點:
delete from myTable
where id not in
(
select minid from
(select min(id) as minid from myTable group by A, B) as newtable
)
不錯。非常好。 –
這是如何執行相對於我的答案?我不是足夠的一個數據庫大師來分析它... –
不錯.. 這將刪除行在哪裏id = 3,而不是在哪裏id在1,3 –
DELETE FROM fruit_table FT1
WHERE EXISTS
(
SELECT * FROM fruit_table FT2
WHERE FT2.fruit_name_column = FT1.fruit_name_column
AND FT2.fruit_integer_column = FT1.fruit_integer_column
AND FT2.id <> FT1.id
)
這是假設你不不關心哪些重複記錄被刪除。
MySQL中對我的錯誤 - 「你的SQL語法錯誤;檢查與你的MySQL服務器版本相對應的手冊,在'FT1'附近使用正確的語法 – Utkanos
你可以使用一個臨時表與你想要的數據:
insert into temp_table
select min(id), A, B
group by A, B
我不完全知道你是問這裏。如果你不想要A和B列的重複,那麼就做你剛剛提到的SELECT DISTINCT A, B FROM XXX
。也許你可以發佈一個你想看到的結果類型的例子。
我想」group by「是我所缺少的,其他職位已經澄清了這一點。 – jason
DELETE
FROM mytable
USING mytable, mytable AS vtable
WHERE vtable.id > mytable.id
AND mytable.A = vtable.A
AND mytable.A = vtable.A
MySQL中的錯誤 - 「您的SQL語法錯誤;請查看與您的MySQL服務器版本相對應的手冊,以便在'tbl USING ...'附近使用正確的語法」 – Utkanos
又一個(來自http://labs.creativecommons.org/2010/01/12/removing-duplicate-rows-in-mysql/)。然後添加一個唯一索引中刪除:
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX tmpindex (A,B);
ALTER TABLE mytable DROP INDEX tmpindex;
的IGNORE
關鍵字是一個MySQL擴展,使得它丟棄違反UNIQUE
關鍵字,而不是僅僅失敗的行。
不適用於MySQL –
再次感謝大家的回覆。我想現在我有一個好主意如何繼續。 – jason