복붙노트

[SQL] 어떻게 MySQL은 여러 테이블에서 삭제하려면?

SQL

어떻게 MySQL은 여러 테이블에서 삭제하려면?

나는 한 번에 몇 테이블에서 삭제하려합니다. 나는 약간의 연구를 수행하고,이 해낸 것

DELETE FROM `pets` p,
            `pets_activities` pa
      WHERE p.`order` > :order
        AND p.`pet_id` = :pet_id
        AND pa.`id` = p.`pet_id`

그러나, 나는이 오류를 얻고있다

내가 지금 경험과 붙어 그래서 나는, 크로스 테이블 전에 삭제 해본 적이 없다!

내가 도대체 ​​뭘 잘못하고있는 겁니까?

해결법

  1. ==============================

    1.사용 A는 DELETE 문에 가입하세요.

    사용 A는 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에서만 삭제

    이것 좀 봐.

    존재합니다 단일 테이블 삭제를 들어, 아직 참조 무결성과 함께 일을하는 다른 방법은 없습니다, IN, NOT IN 존재 등 그러나 테이블이 FROM 절 전에 별칭으로 삭제할 수있는 사용자가 지정하는 위 사람은 얻을 수있다 더 쉽게 몇 꽤 좁은 공간의 아웃됩니다. 나는이 사건의 99 %에 존재하고이 MySQL의 구문은 하루에 소요되는 1 %가에 밖으로 도달하는 경향이있다.

  2. ==============================

    2.이 나타납니다 애완 동물과 pets_activities 간의 간단한 부모 / 자식 관계로 때문에, 당신은 더 나은 삭제 캐스케이드와 외래 키 제약 조건을 만들 해제 될 것입니다.

    이 나타납니다 애완 동물과 pets_activities 간의 간단한 부모 / 자식 관계로 때문에, 당신은 더 나은 삭제 캐스케이드와 외래 키 제약 조건을 만들 해제 될 것입니다.

    애완 동물 행이 삭제 될 때 그 방법은, 그와 관련된 pets_activities 행은 자동으로뿐만 아니라 삭제됩니다.

    그런 다음 쿼리는 간단하게 :

    delete from `pets`
        where `order` > :order
          and `pet_id` = :pet_id
    
  3. ==============================

    3.이것을 사용

    이것을 사용

    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
    
  4. ==============================

    4.나는 순간에 시험에 MySQL 데이터베이스가없는,하지만 당신은 절에서 이전에 삭제하는 것을 지정 시도? 예를 들면 :

    나는 순간에 시험에 MySQL 데이터베이스가없는,하지만 당신은 절에서 이전에 삭제하는 것을 지정 시도? 예를 들면 :

    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의 새로운 버전으로 제한됩니다 생각합니다.

  5. ==============================

    5.구문의 모습은 바로 나에게 ... 그것은 내부 조인 사용 변경하려고 ...

    구문의 모습은 바로 나에게 ... 그것은 내부 조인 사용 변경하려고 ...

    이것 좀 보라.

  6. ==============================

    6.2017 년이 글을 읽는 사람에게, 이것은 내가 비슷한 짓을 한 방법이다.

    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]
    
  7. ==============================

    7.난 당신이 MySQL이 좋은 설명과 함께 문을 가입 DELETE 사용하여 여러 테이블에서 데이터를 삭제하는 방법을 보여주는이 문서를 발견했다.

    난 당신이 MySQL이 좋은 설명과 함께 문을 가입 DELETE 사용하여 여러 테이블에서 데이터를 삭제하는 방법을 보여주는이 문서를 발견했다.

  8. from https://stackoverflow.com/questions/3331992/how-to-delete-from-multiple-tables-in-mysql by cc-by-sa and MIT license