MySQL LEFT JOIN으로 행 삭제


186

작업 마감일과 작업 설명을위한 두 개의 테이블이 있습니다. 각 작업은 상태를 취할 수 있으며 일부 상태는 작업 마감일을 다른 테이블에서 삭제해야 함을 의미합니다.

다음 SELECT과 같이 내 기준에 맞는 작업 / 마감일을 쉽게 할 수 있습니다 LEFT JOIN.

SELECT * FROM `deadline`
LEFT JOIN `job` ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

( status에 속하는 job테이블에 없습니다 deadline)

그러나에서 이러한 행을 삭제하려고 deadline하면 MySQL에서 오류가 발생합니다. 내 질문은 :

DELETE FROM `deadline`
LEFT JOIN `job`
ON deadline.job_id = job.job_id
WHERE `status` = 'szamlazva'
OR `status` = 'szamlazhato'
OR `status` = 'fizetve'
OR `status` = 'szallitva'
OR `status` = 'storno'

MySQL 오류는 아무것도 말하지 않습니다.

SQL 구문에 오류가 있습니다. 1 행의 'LEFT JOIN jobON deadline.job_id = job.job_id WHERE status='szaml ' 근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오.

SELECT실제 DELETE쿼리 로 전환하려면 어떻게 해야합니까?

답변:


334

적용 할 테이블을 지정하기 만하면됩니다 DELETE.

deadline행만 삭제하십시오 .

DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....

deadlinejob행을 삭제하십시오 .

DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....

job행만 삭제하십시오 .

DELETE `job` FROM `deadline` LEFT JOIN `job` ....

4
"AS"를 사용하면 내 절에서 별명을 사용하여 내 목적에 맞게 작동해야했습니다 (고아 삭제).
Urs

흥미롭게도, 내 phpMyAdmin을 4.5.1 문법 검사기 사이에 아무 것도 받아들이지 않을 것 DELETE등을 FROM,하지만 난 이동을 누르면 쿼리 확인 어쨌든을 달렸다.
clayRay

38

"table as"를 사용하는 경우 삭제하도록 지정하십시오.

이 예에서는 table_2에 존재하지 않는 모든 table_1 행을 삭제합니다.

DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL

4
DELETE FROM deadline where ID IN (
    SELECT d.ID FROM `deadline` d LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` =  'szamlazva' OR `status` = 'szamlazhato' OR `status` = 'fizetve' OR `status` = 'szallitva' OR `status` = 'storno');

그런 종류의 하위 쿼리가 MySQL에서 작동하는지 확실하지 않지만 시도하십시오. 마감일 테이블에 ID 열이 있다고 가정합니다.


1
OP는 여전히 DELETE쿼리를 명확하게 할 항목 을 지정해야합니다 . In하위 쿼리와 함께 사용 하면 모든 것이 훨씬 느려집니다. 피하는 것이 가장 좋습니다.
Ian Atkin

DELETE와 사이에 언급 된 표가 없습니다 FROM.
Istiaque Ahmed

1

이 시도:

DELETE `deadline`
FROM `deadline`
INNER JOIN `job` ON `deadline`.`job_id` = `job`.`id`
WHERE `job`.`id` = 123

1

MySQL을 사용하면 DELETE 문에서 INNER JOIN 절을 사용하여 테이블의 행과 다른 테이블의 일치하는 행을 삭제할 수 있습니다.

예를 들어, 지정된 조건을 만족하는 T1 및 T2 테이블에서 행을 삭제하려면 다음 명령문을 사용하십시오.

DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;

DELETE와 FROM 키워드 사이에 테이블 이름 T1과 T2를 넣습니다. T1 테이블을 생략하면 DELETE 문은 T2 테이블의 행만 삭제합니다. 마찬가지로 T2 테이블을 생략하면 DELETE 문은 T1 테이블의 행만 삭제합니다.

이 도움을 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.