MySQL의 여러 테이블에서 삭제하는 방법은 무엇입니까?
한 번에 몇 개의 테이블에서 삭제하려고합니다. 나는 약간의 조사를했고, 이것을 생각 해냈다
DELETE FROM `pets` p,
`pets_activities` pa
WHERE p.`order` > :order
AND p.`pet_id` = :pet_id
AND pa.`id` = p.`pet_id`
그러나이 오류가 발생합니다.
포착되지 않은 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에서만 삭제
참조 http://dev.mysql.com/doc/refman/5.0/en/delete.html를
단일 테이블 삭제의 경우 참조 무결성이있는 경우 EXISTS, NOT EXISTS, IN, NOT IN 등으로 수행하는 다른 방법이 있습니다. 그러나 위의 방법에서는 FROM 절이 가져 오기 전에 별칭으로 삭제할 테이블을 지정합니다. 당신은 몇 개의 꽤 좁은 지점에서 더 쉽게 벗어날 수 있습니다. 99 %의 경우 EXISTS에 연락하는 경향이 있으며이 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
구문이 나에게 맞는 것 같습니다 ... INNER JOIN을 사용하도록 변경하십시오 ...
이것을보세요 : http://www.electrictoolbox.com/article/mysql/cross-table-delete/
현재 테스트 할 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로 제한되어 있다고 생각합니다.
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]
참고 URL : https://stackoverflow.com/questions/3331992/how-to-delete-from-multiple-tables-in-mysql
'program tip' 카테고리의 다른 글
javascript / jQuery를 사용하여 Google reCAPTCHA v2의 유효성을 검사하려면 어떻게해야합니까? (0) | 2020.08.09 |
---|---|
SQL Server 저장 프로 시저의 선택적 매개 변수? (0) | 2020.08.09 |
패키지 관리자 콘솔 활성화-마이그레이션 CommandNotFoundException 특정 VS 프로젝트에서만 (0) | 2020.08.09 |
SpringData JPA에는 메서드 이름 확인을 사용하여 엔터티를 계산하는 방법이 있습니까? (0) | 2020.08.09 |
다른 사람에게 서비스로 이메일을 보낼 때 Reply-To 헤더를 사용해야합니까? (0) | 2020.08.09 |