복붙노트

[SQL] 와 DELETE SQL은 것은 WHERE 조건에 대한 다른 테이블 가입

SQL

와 DELETE SQL은 것은 WHERE 조건에 대한 다른 테이블 가입

나는 가이드 테이블 (죽은 관계)와 아무 관계가없는 guide_category에서 행을 삭제해야합니다.

여기에 내가하고 싶은 것입니다 만, 당연히 작동하지 않습니다.

DELETE FROM guide_category AS pgc 
 WHERE pgc.id_guide_category IN (SELECT id_guide_category 
                                   FROM guide_category AS gc
                              LEFT JOIN guide AS g ON g.id_guide = gc.id_guide
                                  WHERE g.title IS NULL)

오류:

해결법

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

    1.때문에 잠금 구현 문제로, MySQL은 DELETE 또는 UPDATE에 영향을받는 테이블을 참조 할 수 없습니다.

    때문에 잠금 구현 문제로, MySQL은 DELETE 또는 UPDATE에 영향을받는 테이블을 참조 할 수 없습니다.

    당신은 대신 여기에 가입 할 필요가 :

    DELETE  gc.*
    FROM    guide_category AS gc 
    LEFT JOIN
            guide AS g 
    ON      g.id_guide = gc.id_guide
    WHERE   g.title IS NULL
    

    아니면 그냥 NOT IN을 사용합니다 :

    DELETE  
    FROM    guide_category AS gc 
    WHERE   id_guide NOT IN
            (
            SELECT  id_guide
            FROM    guide
            )
    
  2. ==============================

    2.나는 당신의 설명에서, 다음은 충분 생각 :

    나는 당신의 설명에서, 다음은 충분 생각 :

    DELETE FROM guide_category 
    WHERE id_guide NOT IN (SELECT id_guide FROM guide)
    

    나는, 관련된 테이블에는 참조 무결성 제약 조건이 없다는 것을, 있다고 가정?

  3. ==============================

    3.쉬운 이해를 위해이 샘플 SQL 스크립트를 사용해보십시오

    쉬운 이해를 위해이 샘플 SQL 스크립트를 사용해보십시오

    CREATE TABLE TABLE1 (REFNO VARCHAR(10))
    CREATE TABLE TABLE2 (REFNO VARCHAR(10))
    
    --TRUNCATE TABLE TABLE1
    --TRUNCATE TABLE TABLE2
    
    INSERT INTO TABLE1 SELECT 'TEST_NAME'
    INSERT INTO TABLE1 SELECT 'KUMAR'
    INSERT INTO TABLE1 SELECT 'SIVA'
    INSERT INTO TABLE1 SELECT 'SUSHANT'
    
    INSERT INTO TABLE2 SELECT 'KUMAR'
    INSERT INTO TABLE2 SELECT 'SIVA'
    INSERT INTO TABLE2 SELECT 'SUSHANT'
    
    SELECT * FROM TABLE1
    SELECT * FROM TABLE2
    
    DELETE T1 FROM TABLE1 T1 JOIN TABLE2 T2 ON T1.REFNO = T2.REFNO
    

    귀하의 경우는 다음과 같습니다

       DELETE pgc
         FROM guide_category pgc 
    LEFT JOIN guide g
           ON g.id_guide = gc.id_guide 
        WHERE g.id_guide IS NULL
    
  4. ==============================

    4.방법에 대해 :

    방법에 대해 :

    DELETE guide_category  
      WHERE id_guide_category IN ( 
    
            SELECT id_guide_category 
              FROM guide_category AS gc
         LEFT JOIN guide AS g 
                ON g.id_guide = gc.id_guide
             WHERE g.title IS NULL
    
      )
    
  5. from https://stackoverflow.com/questions/1980738/sql-delete-with-join-another-table-for-where-condition by cc-by-sa and MIT license