Próbuję usunąć z kilku tabel naraz. Zrobiłem trochę badań i wymyśliłem to
DELETE FROM `pets` p,
`pets_activities` pa
WHERE p.`order` > :order
AND p.`pet_id` = :pet_id
AND pa.`id` = p.`pet_id`
Jednak otrzymuję ten błąd
Uncaught Database_Exception [1064]: Wystąpił błąd w składni SQL; sprawdź podręcznik, który odpowiada Twojej wersji serwera MySQL, aby uzyskać właściwą składnię, aby użyć w pobliżu 'p,
pets_activities
pa ...
Nigdy wcześniej nie wykonywałem krzyżowego usuwania tabeli, więc jestem niedoświadczony i na razie utknąłem!
Co ja robię źle?
SELECT
trwało to podobnie długo?Ponieważ wydaje się, że jest to prosta relacja rodzic / dziecko między
pets
ipets_activities
, lepiej byłoby utworzyć ograniczenie klucza obcego za pomocą kaskady usuwania.W ten sposób po
pets
usunięciupets_activities
wiersza skojarzone z nim wiersze są również automatycznie usuwane.Wtedy twoje zapytanie staje się proste:
źródło
pa
jest to właściwe dzieckop
dziękiid/pet_id
mapowaniu.Użyj tego
lub
źródło
W tej chwili nie mam bazy danych mysql do przetestowania, ale czy próbowałeś określić, co należy usunąć przed klauzulą from? Na przykład:
Myślę, że użyta składnia jest ograniczona do nowszych wersji mysql.
źródło
Składnia wydaje mi się właściwa ... spróbuj zmienić ją na
INNER JOIN
...Spójrz na to .
źródło
Dla każdego, kto czyta to w 2017 roku, zrobiłem coś podobnego.
Generalnie, aby usunąć wiersze z wielu tabel, składnię, którą postępuję, podano poniżej. Rozwiązanie opiera się na założeniu, że między dwiema tabelami istnieje relacja.
źródło
Znalazłem ten artykuł, który pokazuje, jak usunąć dane z wielu tabel za pomocą instrukcji MySQL DELETE JOIN z dobrym wyjaśnieniem.
źródło