MySQL i usunięcie duplikatów

0

Mam tabelę w MySQL która ma około 600.000 rekordów i do niej inna tabela po id używa klucza obcego

  1. tabela Produkty
    id | kod | oferta | email
    1, 16, 60, [email protected]
    2, 16, 60, [email protected]
    3, 17, 90, [email protected]
    4, 16, 90, [email protected]
    5, 16, 60, [email protected]

  2. tabela Akywacje
    id | produkt | data
    1, 5, 2015-05-05 09:00

I teraz jak widzicie w tabeli Produkty są duplikaty które poza ID mają takie same wartości w kolumnach. Są to ID: 1, 2, 5, przy czym produkt numer 5 (w tym przypadku został aktywowany). I takich sytuacji w bazie są tysiące.

Czy da się to jakoś SQL'em zrobić aby usunąć zduplikowane wartości, ale
1 - tylko te które nie zostały aktywowane
2 - jeżeli żaden nie został aktywowany, to usuwamy wszystkie prócz dowolnego 1?

Skomplikowane? :) Realne do zrobienia w samym SQL? Dzięki za pomoc

0

Jasne że sie da. Należy znormalizować bazę do 3NF i problem sam zniknie.

0

Tymczasem nie chodzi o normalizowane, bo problem został usunięty, ale o usunięcie teraz tego co niepotrzebne przez wykonanie jakiegos SQL'a ......, coś zrobiłem, ale bezpośrednio w SQL i czas wychodzi ponad 4 minuty, więc dosć ..... dużo .....

0
DELETE l1 FROM produkty l1, produkty l2
   WHERE
      l1.email = l2.email AND 
      l1.id <> l2.id AND 
      l1.oferta = l2.oferta AND
      l1.kod = l2.kod AND 
      l1.id NOT IN (SELECT produkt from aktywacje)
0

Nikt? naprawdę? Twierdzicie jednak że się tego nie da zrobić w samym MySQL'u ?

0

no tak, tylko zadany problem w pytaniu ma głębszy problem niż na pałę usunięcie duplikatów?, może źle wytłumaczyłem

są dwie tabele, Produkty i Aktywacje.

Produkty

id produkt wariant email platnosc aktywny
1 12 60 [email protected] paypal 1
2 12 60 [email protected] manual 1
3 12 60 [email protected] manual 0
4 12 60 [email protected] paypal 0

Aktywacje

id produkt data
1 1(FK_Produkty) 2015-05-12

Jak widać tabela Produkty ma duplikaty, produkty też mogą być/lub nie być aktywowane (tabela Aktywacje). Jeżeli dany rekord jest duplikatem i posiada aktywację nie robimy z nim nic, natomiast jeżeli nie posiada aktywacji to musimy zrobić tak

  • ustawić aktywny na 0 ale tylko i wyłącznie wtedy kiedy jeden z duplikatów (obojętne który) jest aktywny (zawsze jeden z duplikatów musi być aktywny, a reszta niekatywna - pamiętając o warunku że jak jest aktywowany to nie możemy go deaktywować w tabeli Produkty)

1 użytkowników online, w tym zalogowanych: 0, gości: 1