mysql 테이블에서 고아 항목을 삭제하려고합니다.
나는 이와 같은 2 개의 테이블을 가지고있다 :
표 files:
| id | ....
------------
| 1  | ....
| 2  | ....
| 7  | ....
| 9  | ....
테이블 blob:
| fileid | ....
------------
| 1  | ....
| 2  | ....
| 3  | ....
| 4  | ....
| 4  | ....
| 4  | ....
| 9  | ....
fileid및 id열 함께 테이블을 조인하는 데 사용할 수 있습니다.
테이블 blob에서 fileid찾을 수없는 테이블의 모든 행을 삭제하고 싶습니다 files.id.
따라서 위의 예를 사용하면 blob테이블 에서 3 & 4 행이 삭제 됩니다.
답변
LEFT JOIN / IS NULL 사용 :
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)
NOT IN 사용 :
DELETE FROM BLOB
 WHERE fileid NOT IN (SELECT f.id
                        FROM FILES f)
경고
가능하면 트랜잭션 내에서 DELETE를 수행하고 (지원되는 경우 : IE : MyISAM에 없음) 롤백을 사용하여 문제가 발생할 경우 변경 사항을 되돌릴 수 있습니다.
답변
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...*/
      )
답변
DELETE FROM blob
WHERE NOT EXISTS (
    SELECT *
    FROM files
    WHERE id=blob.id
)
답변
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);
답변
