MySQL bir alt takılı/güncellenmiş siliniyor tabloyu kullanamaz çok iğrenç bir kısıtlama/sahiptir yürütmek için php yapmak -Select.
Ancak, silinecek tabloya (alt seçim kullanmak yerine) katılarak bu konuda çalışabilirsiniz. Bu kopyaların her biri için bir satır tutacak
DELETE d
FROM table_with_duplicates d
JOIN (
SELECT min(id) as min_id, field
FROM table_with_duplicates
GROUP BY field
) keep ON keep.field = d.field
AND keep.min_id <> d.id;
(lowes ile: biri
Tablonuzdaki benzersiz tanımlayıcı bir tür varsayarsak (aşağıdaki açıklamada bir sütun id
varsayıyorum) id
sütununda değer).
tüm yinelenen satırları (en az bir tane tutmuyor) silmek isterseniz, AND keep.min_id <> d.id
koşulunu kaldırmanız yeterlidir. Benzersiz bir sütun var, ama (en az bir satırda tutarak değil) tüm çiftleri kaldırmak istemiyorsanız
Düzenleme
, o zaman kullanabilirsiniz:
DELETE d
FROM table_with_duplicates d
JOIN (
SELECT field
FROM table_with_duplicates
GROUP BY field
HAVING count(*) > 1
) del ON del.field = d.field;
Bir hata mesajı mı aldınız veya sorgu başarıyla çalıştırıldı mı? –
sorgunuz kopyaları da dahil olmak üzere tüm alanları silemez miydi? Bu kimliğe sahip 2 kopyası varsa, IN() sorgunuz her ikisini de siler. En az bir kayıt tutmak istemiyor musun? – GGio
mysql, veri seçeceğiniz bir tabloyu güncellemenize/silmenize izin vermez. –