air_szyna
27.11.2006, 18:24:16
Witam
Mam Problem z napisaniem jednego zapytania.
Mam 2 tabele
W pierwszej są pola
| id_gracza | nick gracza |
W drugiej
| id_gracza | ilosc_pkt | data |
I teraz chodzi mi o zapytanie które z drugiej tabeli usunie wszystkie rekordy które nie pasują do żadnego gracza.
Jeśli np z tabeli pierwszej usunę gracza o identyfikatorze 5,6,9 i 15 to chciałbym żeby zapytanie usuwało z drugiej tabeli wszystkie dane do tych graczy.
batman
27.11.2006, 19:26:14
DELETE FROM tabela2 WHERE id_gracza NOT IN (SELECT id_gracza FROM tabela1)
Lepiej jednak zrobisz, jeśli podczas usuwania danych z tabeli1, usuniesz dane z tabeli2
DELETE FROM tabela1 WHERE id_gracza = 1;
DELETE FROM tabela2 WHERE id_gracza = 1;
Wartość 1 jest tu tylko przykładem
air_szyna
27.11.2006, 19:48:55
Dzięki ... właśnie o to mi chodziło :-)
A dlaczego drugie rozwiązanie jest lepsze
batman
27.11.2006, 20:01:22
Usuwając dane w tym samym mniej więcej momencie, będziesz miał pewność, iż nie będą wisiały "puste" wpisy. W ten sposób będziesz miał większy porządek w bazie. Poza tym jeśli chcesz używać pierwszego rozwiązania, musisz wykonywać zapytanie cyklicznie, a to oznacza jakiś skrypcik działający w cronie. Najlepszym rozwiązaniem byłoby napisanie trigerra, ktróry usuwałby dane z drugiej tabeli w momencie usunięcia ich z tabeli pierwszej.
edit
Zapomniałem dodać, by uważań na klucze obce i kolejności usuwania danych.