program tip

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

radiobox 2020. 8. 9. 10:18
반응형

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_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에서만 삭제

참조 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

반응형