Istnieją 2 stoły, spawnlist
i npc
, i muszę usunąć dane z spawnlsit
.
npc_templateid = n.idTemplate
jest jedyną rzeczą, która „łączy” tabele. Próbowałem tego skryptu, ale nie działa.
Próbowałem tego:
DELETE s FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");
mysql
sql
sql-server
inner-join
sql-delete
JoinOG
źródło
źródło
Odpowiedzi:
Dodaj
.*
dos
w pierwszej linii.Próbować:
źródło
spawnlist
. Rozumieml2revo.root.spawnlist
idb.root.spawnlist
.AS
swoje aliasy.Jeśli baza danych to InnoDB, lepszym pomysłem może być użycie kluczy obcych i kaskadowe usuwanie, co zrobi to, co chcesz, a także spowoduje, że nie będą przechowywane zbędne dane.
Jednak w tym przykładzie nie wydaje mi się, żebyś potrzebował pierwszych liter:
Lepszym pomysłem może być zaznaczenie wierszy przed usunięciem, aby mieć pewność, że usuwasz to, co chcesz:
Możesz również sprawdzić składnię usuwania MySQL tutaj: http://dev.mysql.com/doc/refman/5.0/en/delete.html
źródło
jeśli baza danych to InnoDB, nie musisz wykonywać łączenia podczas usuwania. tylko
można użyć do usunięcia wszystkich rekordów połączonych z kluczami obcymi w innych tabelach, aby to zrobić, musisz najpierw połączyć swoje tabele w czasie projektowania.
jeśli korzystasz z MyISAM, możesz usunąć rekordy, do których się dołączasz
w pierwszym wierszu zainicjowałem dwie tabele tymczasowe do usunięcia rekordu, w drugim wierszu przypisałem tabelę istnienia zarówno do a i b, ale tutaj połączyłem obie tabele razem ze słowem kluczowym join i dopasowałem klucz podstawowy i obcy dla obu tabel, które tworzą link, w ostatniej linii przefiltrowałem rekord według pola do usunięcia.
źródło
type
jest właściwie w innej tabeli, a nie wspawnlist
tabeli, więc połączenie jest konieczne