要件: DRUG 内の同じプライマリ ID と薬物名を持つアイテムを削除し、drug_seq の最小行を保持します
質問: MySQL はこれらのメソッドを使用して重複を削除しますが、なぜ数百または数十のアイテムしか削除できないのですか重複データは歯磨き粉を絞り出すのと同じです。実行するたびに、少しずつ重複を削除できます。明らかに何十万もの重複データがあります。いくつかの方法を試しましたが、まだ不完全です。
#方法 1:
DELETE FROM `drug2022` WHERE Drug_seq IN(
SELECT Drug_seq FROM (
SELECT Drug_seq FROM `drug2022` WHERE (primaryid) ,薬剤名) IN (SELECT プライマリ ID,薬剤名 FROM `drug2022` GROUP BY プライマリ ID,薬剤名 HAVING COUNT(*) > 1)
AND
薬剤_seq NOT IN (SELECT MIN(drug_seq) FROM `drug2022` GROUP BY Primaryid,drugname HAVING COUNT (*) > 1))AS a1);
##方法 2: DELETE FROM `drug2022` WHERE Drug_seq NOT IN ( ) (SELECT t1.min_drug_seq ) FROM (SELECT MIN(drug_seq) AS min_drug_seq FROM `drug2022` GROUP BY薬剤名、プライマリ ID HAVING COUNT(1) > 1) t1)) AND (薬剤名、プライマリ ID) IN (SELECT t2.drugname, t2.primaryid ) FROM (SELECT 薬剤名, プライマリ ID FROM `drug2022` GROUP BY 薬剤名 , プライマリ ID HAVING COUNT(1) > 1) t2);方法 3:
DELETE t1
FROM `drug2022` t1、
`drug2022` t2
WHERE t1.primaryid = t2.primaryid
AND t1.drugname = t2。薬剤名
AND t1.drug_seq < t2.drug_seq;
#メソッド 4
DELETE
FROM `drug2022`
WHERE Drug_seq NOT IN (SELECT * FROM (SELECT MIN(drug_seq) FROM `drug2022` GROUP BY プライマリ ID, 薬物名) t2);