Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usunięcie duplikatów z bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
knefelio
Chciałbym z bazy mysql usunąć rekordy ze zduplikowanym jednym polem. Znalazłem taki kod:

  1. DELETE FROM tabela USING tabela, tabela AS alias_tabeli
  2. WHERE (tabela.klucz_glowny > alias_tabeli.klucz_glowny) AND (tabela.e_mail = alias_tabeli.e_mail);


Powoduje on u mnie zapętlenie i muszę przerwać jego wykonywanie. Co może być tego przyczyną?
bww
Ja nie do końca rozumiem co jest w zapytaniu powyżej.

  1. DELETE FROM tabela t1
  2. WHERE EXISTS (SELECT 1 FROM tabela t2 WHERE t1.email = t2.email GROUP BY email HAVING count(*) > 1)
  3. ORDER BY klucz_glowny -- to można dodać jeśli klucz główny jest autoincrement i zależy nam na usunięciu rekordu wcześniej dodanego
  4. LIMIT 1


Przed wykonaniem najlepiej zamienić DELETE na SELECT * i zobaczyć, czy otrzymamy oczekiwany wynik, a jeszcze lepiej zrobić backup tabeli.
Zapytania nie testowałem.
knefelio
ok, trochę potestowałem i to zapytanie które podałem działa, ale zajmuje bardzo dużo czasu. wydaje mi się że jest to spowodowane problemem z kolumną autoincrement

tabela z której chciałem odsiać zduplikowane wiersze tworzona jest z kilku innych na zasadzie:

  1. INSERT INTO tabela(pole1)
  2. SELECT pole1
  3. FROM tabela1;
  4.  
  5. INSERT INTO tabela(pole1)
  6. SELECT pole1
  7. FROM tabela2;


Z tabela1 dodaje 4000 wierszy z tabela2 8000 wierszy jest w sumie zatem w wynikowej tabeli 12000 wierszy a numeracja id pokazuje wierszy 16000. We właściwościach tabeli widać 12000 wierszy, a pole id biegnie do 4000 a potem zaczyna się od 8000..16000. Czym może to być spowodowane?

Id mam zdefiniowane tak:

  1. id int NOT NULL AUTO_INCREMENT,
bww
Zapytanie które podałem powinno się wykonać w kilka sekund, próbowałeś?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.