programing

ID가 일치하지 않는 SQL 행을 다른 테이블에서 삭제합니다.

bestcode 2022. 11. 7. 22:07
반응형

ID가 일치하지 않는 SQL 행을 다른 테이블에서 삭제합니다.

mysql 테이블에서 고아 항목을 삭제하려고 합니다.

다음과 같은 테이블이 두 개 있습니다.

테이블files:

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

테이블blob:

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

fileid그리고.id열을 사용하여 테이블을 결합할 수 있습니다.

테이블의 모든 행을 삭제하고 싶다blob어디에fileid표에서 찾을 수 없다files.id.

따라서 위의 예제를 사용하면 행이 삭제됩니다.blob테이블.

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)

사용 안 함:

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 <table> 
WHERE <row column you want to delete by > not in 
(select <column you want to compare other column> from <other table>)

그러면 첫 번째 열이 두 번째 테이블에 나타나지 않을 때 행이 삭제됩니다.

언급URL : https://stackoverflow.com/questions/3384127/delete-sql-rows-where-ids-do-not-have-a-match-from-another-table

반응형