[mysql] MySQL LEFT JOIN으로 행 삭제

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

다음 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쿼리 로 전환하려면 어떻게 해야합니까?



답변

적용 할 테이블을 지정하기 만하면됩니다 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` ....


답변

“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


답변

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 열이 있다고 가정합니다.


답변

이 시도:

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


답변

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 테이블의 행만 삭제합니다.

이 도움을 바랍니다.


답변