Çoğaltılamaz alan değerlerini bulmak ve MySQL onları silmek için nasıl

4 Cevap php

Biz (tpl_users) isimli masamıza (username) adında bir alan var düşünün, şimdi bu tablo çoğaltılamaz satırları çok var

Ben çoğaltılamaz adlarını silmek için bu kodu yazdı:

Delete FROM tpl_users WHERE username = username;

Nasıl çoğaltılamaz adlarını silmek mümkün mü?

4 Cevap

Sorgunuz kullanıcı adı null değil tüm satırları siler.

Eğer birden fazla satır ile ilişkili kullanıcı adlarını tanımlamak isterseniz:

SELECT username
  FROM tpl_users
 GROUP BY username
HAVING COUNT(*) > 1;

DELETE içine dönüştürme önce sorguları çoğunluğu yerine sadece tek bir yinelenenlerin istinat daha çoğaltılamaz adı ile ilişkili tüm kayıtları silmek farkında olmak gerekir.

Ne yapmak istediğiniz yinelenen satırları silmek.

Olmayan tüm yinelenen satırları bulmak ve bu satır ile tabloyu değiştirerek yapacağım:

create table tpl_users_new as select distinct * from tpl_users;

alter table tpl_users rename to tpl_users_old;

alter table tpl_users_new rename to tpl_users;

Eğer düşük kimliği ile kullanıcıların tutmak istiyorsanız, ilk bu sorgu (veritabanı ve yedekleme) kaldırmak istediğiniz gibi olduğundan emin olun:

SELECT u1.id, u1.username FROM tpl_users u1 LEFT JOIN tpl_users u2 ON u1.username = u2.username WHERE u1.id > u2.id;

Sonra, veritabanı yedeklenir ve emin eğer Yukarıdaki açıklamalarımızın kaldırmak istediğinizi temsil eder.

DELETE u1 FROM tpl_users u1 LEFT JOIN tpl_users u2 ON u1.username = u2.username WHERE u1.id > u2.id

Eğer tabloda birincil anahtar sütun var varsayarak, bunu yapabilirsiniz:

DELETE
FROM tpl_uers
USING tpl_users, tpl_users AS vtable
WHERE vtable.id > tpl_users.id
AND tpl_users.username = vtable.username