반응형
SQL DELETE with WHERE 조건에 대한 다른 테이블 참여
행을 삭제해야 합니다.guide_category
와는 관계없는guide
테이블(사망 관계)
제가 하고 싶은 일은 이렇습니다만, 물론 잘 되지 않습니다.
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)
오류:
FROM 절에서 업데이트할 대상 테이블 'guide_category'를 지정할 수 없습니다.
잠금 구현 문제로 인해MySQL
에서는 영향을 받는 테이블을 참조할 수 없습니다.DELETE
또는UPDATE
.
그 다음에...JOIN
대신 여기:
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
)
당신의 설명을 들어보면 다음과 같은 것으로 충분할 것 같습니다.
DELETE FROM guide_category
WHERE id_guide NOT IN (SELECT id_guide FROM guide)
관련된 테이블에는 참조 무결성 제약이 없다고 생각합니다.
알기 쉽게 하기 위해 이 샘플 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
그럼 어떻게 해?
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
)
언급URL : https://stackoverflow.com/questions/1980738/sql-delete-with-join-another-table-for-where-condition
반응형
'programing' 카테고리의 다른 글
Ubuntu 16.04 MariaDb 설정 예 없음 (0) | 2022.09.18 |
---|---|
안드로이드 java.langVerify Error? (0) | 2022.09.18 |
php로 파일 압축 풀기 (0) | 2022.09.18 |
레지스트리 키 오류: Java 버전의 값은 '1.8'이지만 '1.7'이 필요합니다. (0) | 2022.09.18 |
PHP 코드에서 assert를 사용해야 합니까? (0) | 2022.09.18 |