[mysql] MySQL의 여러 테이블에서 삭제하는 방법은 무엇입니까?

한 번에 몇 개의 테이블에서 삭제하려고합니다. 나는 약간의 조사를했고, 이것을 생각 해냈다

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_activitiespa … 근처에서 사용할 올바른 구문은 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절은 몇 꽤 꽉 당신을 얻을 수는 더 쉽게 반점. 나는 EXISTS99 %의 경우에 손을 뻗는 경향이 있으며 ,이 MySQL 구문이 하루에 걸리는 1 %가 있습니다.


답변

이 사이에 간단한 부모 / 자식 관계로 보이므로 petspets_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]


답변

좋은 설명과 함께 MySQL DELETE JOIN 문을 사용하여 여러 테이블에서 데이터를 삭제하는 방법을 보여주는이 기사를 찾았습니다 .

여기에 이미지 설명 입력