Mam dwie tabele, jedną dotyczącą terminów pracy, drugą opisującą pracę. Każde zadanie może mieć status, a niektóre statusy oznaczają, że terminy zadań muszą zostać usunięte z drugiej tabeli.
Mogę z łatwością SELECT
obsadzić stanowiska / terminy spełniające moje kryteria za pomocą LEFT JOIN
:
SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
(nie status
należy do job
tabeli deadline
)
Ale gdy chcę usunąć te wiersze deadline
, MySQL zgłasza błąd. Moje zapytanie to:
DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'
Błąd MySQL nic nie mówi:
Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL, aby użyć właściwej składni w pobliżu „LEFT JOIN
job
ON deadline.job_id = job.job_id WHEREstatus
= 'szaml” w wierszu 1
Jak mogę zmienić moje zapytanie w SELECT
działające DELETE
?
źródło
DELETE
iFROM
, ale zapytanie i tak działało poprawnie po naciśnięciu Go.Jeśli używasz opcji „Tabela jako”, określ ją do usunięcia.
W tym przykładzie usuwam wszystkie wiersze table_1, które nie istnieją w table_2.
źródło
Nie jestem pewien, czy tego rodzaju kwerenda podrzędna działa w MySQL, ale spróbuj. Zakładam, że masz tabelę identyfikatorów w tabeli terminów.
źródło
DELETE
ma uczynić zapytanie jednoznacznym. KorzystanieIn
z podkwerend sprawia, że wszystko jest o wiele wolniejsze. Najlepiej tego unikać.DELETE
aFROM
.Spróbuj tego:
źródło
MySQL pozwala na użycie klauzuli INNER JOIN w instrukcji DELETE do usuwania wierszy z tabeli i pasujących wierszy z innej tabeli.
Na przykład, aby usunąć wiersze zarówno z tabel T1, jak i T2, które spełniają określony warunek, użyj następującej instrukcji:
Zauważ, że umieszczasz nazwy tabel T1 i T2 między słowami kluczowymi DELETE i FROM. W przypadku pominięcia tabeli T1 instrukcja DELETE usuwa tylko wiersze w tabeli T2. Podobnie, jeśli pominiesz tabelę T2, instrukcja DELETE usunie tylko wiersze w tabeli T1.
Mam nadzieję, że to pomoże.
źródło