한 번에 몇 개의 테이블에서 삭제하려고합니다. 나는 약간의 조사를했고, 이것을 생각 해냈다
DELETE FROM `pets` p,
`pets_activities` pa
WHERE p.`order` > :order
AND p.`pet_id` = :pet_id
AND pa.`id` = p.`pet_id`
그러나이 오류가 발생합니다.
Uncaught Database_Exception [1064] : SQL 구문에 오류가 있습니다. ‘p,
pets_activities
pa … 근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 설명서를 확인하십시오 .
나는 전에 크로스 테이블 삭제를 한 적이 없기 때문에 경험이없고 지금은 붙어 있습니다!
내가 뭘 잘못하고 있죠?
답변
문 JOIN
에서 사용하십시오 DELETE
.
DELETE p, pa
FROM pets p
JOIN pets_activities pa ON pa.id = p.pet_id
WHERE p.order > :order
AND p.pet_id = :pet_id
또는 사용할 수 있습니다 …
DELETE pa
FROM pets_activities pa
JOIN pets p ON pa.id = p.pet_id
WHERE p.order > :order
AND p.pet_id = :pet_id
…에서만 삭제 pets_activities
참조 이 .
단일 테이블 삭제를 들어, 아직 참조 무결성과 함께, 서로 수행하는 방법이 있습니다 EXISTS
, NOT EXISTS
, IN
, NOT IN
등 그러나 전에 별칭으로 삭제하는있는 테이블에서 지정하는 위 한 FROM
절은 몇 꽤 꽉 당신을 얻을 수는 더 쉽게 반점. 나는 EXISTS
99 %의 경우에 손을 뻗는 경향이 있으며 ,이 MySQL 구문이 하루에 걸리는 1 %가 있습니다.
답변
이 사이에 간단한 부모 / 자식 관계로 보이므로 pets
및pets_activities
, 당신은 더 나은 삭제 캐스케이드와 외래 키 제약 조건을 만들 해제 될 것입니다.
이렇게하면 pets
행이 삭제 될 때pets_activities
연관된 행도 자동으로 삭제됩니다.
그러면 쿼리가 간단 해집니다.
delete from `pets`
where `order` > :order
and `pet_id` = :pet_id
답변
이것을 사용하십시오
DELETE FROM `articles`, `comments`
USING `articles`,`comments`
WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4
또는
DELETE `articles`, `comments`
FROM `articles`, `comments`
WHERE `comments`.`article_id` = `articles`.`id` AND `articles`.`id` = 4
답변
현재 테스트 할 mysql 데이터베이스가 없지만 from 절 이전에 삭제할 항목을 지정해 보셨습니까? 예를 들면 :
DELETE p, pa FROM `pets` p,
`pets_activities` pa
WHERE p.`order` > :order
AND p.`pet_id` = :pet_id
AND pa.`id` = p.`pet_id`
사용한 구문은 최신 버전의 mysql로 제한되어 있다고 생각합니다.
답변
구문이 나에게 맞는 것 같습니다 … 사용하도록 변경하십시오 INNER JOIN
…
이것 좀 봐 .
답변
2017 년에이 글을 읽는 사람에게는 이것이 제가 비슷한 일을 한 방법입니다.
DELETE pets, pets_activities FROM pets inner join pets_activities
on pets_activities.id = pets.id WHERE pets.`order` > :order AND
pets.`pet_id` = :pet_id
일반적으로 여러 테이블에서 행을 삭제하기 위해 따르는 구문은 다음과 같습니다. 솔루션은 두 테이블 사이에 어떤 관계가 있다는 가정을 기반으로합니다.
DELETE table1, table2 FROM table1 inner join table2 on table2.id = table1.id
WHERE [conditions]