[SQL] ID를 다른 테이블에서 일치하지 않는 삭제 SQL 행
SQLID를 다른 테이블에서 일치하지 않는 삭제 SQL 행
나는 MySQL의 테이블에 항목을 고아 삭제하는 것을 시도하고있다.
이 같은 두 테이블이 :
표 파일 :
| id | ....
------------
| 1 | ....
| 2 | ....
| 7 | ....
| 9 | ....
테이블에 BLOB :
| fileid | ....
------------
| 1 | ....
| 2 | ....
| 3 | ....
| 4 | ....
| 4 | ....
| 4 | ....
| 9 | ....
FileID에와 ID 열 함께 테이블을 조인하는 데 사용할 수 있습니다.
나는 FileID에이 테이블 files.id에서 찾을 수 없습니다 테이블 방울의 모든 행을 삭제합니다.
3 & 4 (들) 블롭 테이블 : 행을 삭제할 것이라고 위의 예제를 사용 그래서.
해결법
-
==============================
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.
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.
DELETE FROM blob WHERE NOT EXISTS ( SELECT * FROM files WHERE id=blob.id )
-
==============================
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);
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
'SQL' 카테고리의 다른 글
[SQL] SQL Server의 문을 선택 중첩 (0) | 2020.05.07 |
---|---|
[SQL] LEFT 및 RIGHT는 SQL OUTER 조인 대 LEFT 및 RIGHT 차이는 JOIN [중복] (0) | 2020.05.07 |
[SQL] 그룹으로의 실행 순서 무엇 갖는 및 Where 절 SQL 서버에? (0) | 2020.05.06 |
[SQL] SQL 서버 루프 - 레코드 집합을 통해 내가 루프를 어떻게 (0) | 2020.05.06 |
[SQL] MySQL은 어떻게 행을 복사하지만 몇 가지 필드를 변경하려면? (0) | 2020.05.06 |