복붙노트

[SQL] ID를 다른 테이블에서 일치하지 않는 삭제 SQL 행

SQL

ID를 다른 테이블에서 일치하지 않는 삭제 SQL 행

나는 MySQL의 테이블에 항목을 고아 삭제하는 것을 시도하고있다.

이 같은 두 테이블이 :

표 파일 :

| id | ....
------------
| 1  | ....
| 2  | ....
| 7  | ....
| 9  | ....

테이블에 BLOB :

| fileid | ....
------------
| 1  | ....
| 2  | ....
| 3  | ....
| 4  | ....
| 4  | ....
| 4  | ....
| 9  | ....

FileID에와 ID 열 함께 테이블을 조인하는 데 사용할 수 있습니다.

나는 FileID에이 테이블 files.id에서 찾을 수 없습니다 테이블 방울의 모든 행을 삭제합니다.

3 & 4 (들) 블롭 테이블 : 행을 삭제할 것이라고 위의 예제를 사용 그래서.

해결법

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

    1.

    DELETE b FROM BLOB b 
      LEFT JOIN FILES f ON f.id = b.fileid 
          WHERE f.id IS NULL
    
    DELETE FROM BLOB 
     WHERE NOT EXISTS(SELECT NULL
                        FROM FILES f
                       WHERE f.id = fileid)
    
    DELETE FROM BLOB
     WHERE fileid NOT IN (SELECT f.id 
                            FROM FILES f)
    

    당신은 문제가있는 경우 되돌릴 변화에 롤백 사용할 수 있도록 : - 가능하면, 트랜잭션 내에서 h 제한 수행 (하지의 MyISAM에 IE 지원을 가정).

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

    2.

    DELETE FROM blob 
    WHERE fileid NOT IN 
           (SELECT id 
            FROM files 
            WHERE id is NOT NULL/*This line is unlikely to be needed 
                                   but using NOT IN...*/
          )
    
  3. ==============================

    3.

    DELETE FROM blob
    WHERE NOT EXISTS (
        SELECT *
        FROM files
        WHERE id=blob.id
    )
    
  4. ==============================

    4.

    delete from table1 t1 
        WHERE not exists (select id from table2 where related_field_in_t2=t1.id) 
        AND not exists (select id from table3 where related_field_in_t3=t1.id) 
        AND not exists (select id from table4 where related_field_t4=t1.id) 
        AND not exists (select id from table5 where related_field_t5=t1.id);
    
  5. from https://stackoverflow.com/questions/3384127/delete-sql-rows-where-ids-do-not-have-a-match-from-another-table by cc-by-sa and MIT license