programing

조인을 사용하여 한 테이블에서 삭제

padding 2023. 8. 16. 22:03
반응형

조인을 사용하여 한 테이블에서 삭제

다른 데이터베이스의 선택 기준에 따라 한 데이터베이스에서 레코드를 삭제하려고 합니다.작업 목록과 전자 메일을 저장하는 전자 메일 알림이라는 두 개의 테이블이 있습니다.그러면 우리는 직업이 있습니다.마감된 작업에 대한 전자 메일 알림을 지웁니다.스택 오버플로에서 이러한 유형의 구문으로 이어지는 몇 가지 초기 예를 발견했습니다(이전에는 where 이전에 조인을 시도했습니다).

DELETE FROM emailNotification
WHERE notificationId IN (
 SELECT notificationId FROM emailNotification e
 LEFT JOIN jobs j ON j.jobId = e.jobId
WHERE j.active = 1
)

오류가 발생했습니다. FROM 절에서 업데이트 대상 테이블 '이메일 알림'을 지정할 수 없습니다.

저는 당신의 요구 사항에 대해 확신할 수 없습니다.당신의 질문에서 제가 이해한 것은 당신이 마감된 모든 작업의 이메일을 삭제하기를 원한다는 것입니다.이것을 사용해 보십시오.

DELETE e FROM emailNotification e 
LEFT JOIN jobs j ON j.jobId = e.jobId 
WHERE j.active = 1 AND CURDATE() < j.closeDate

조인이 있는 MySQL DELETE 레코드

단일 쿼리를 사용하여 여러 테이블에서 여러 레코드를 삭제하는 방법은 다음과 같습니다.

일반적으로 SELECT 문에서는 INER JOIN을 사용하여 다른 테이블에 해당 레코드가 있는 테이블에서 레코드를 선택합니다.또한 DELETE 문과 함께 INER JOIN 절을 사용하여 테이블에서 레코드를 삭제하고 다른 테이블의 해당 레코드도 삭제할 수 있습니다. 예를 들어 특정 조건을 충족하는 T1 및 T2 테이블 모두에서 레코드를 삭제하려면 다음 문을 사용합니다.

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

테이블 이름 T1과 T2를 DELETE와 FROM 사이에 넣습니다.T1 테이블을 생략하면 DELETE 문은 T2 테이블의 레코드만 삭제하고, T2 테이블을 생략하면 T1 테이블의 레코드만 삭제합니다.

조인 조건T1.key = T2.key는 삭제해야 하는 T2 테이블의 해당 레코드를 지정합니다.

WHERE 절의 조건은 삭제해야 하는 T1 및 T2의 레코드를 지정합니다.

다음과 같은 방법을 사용할 수 있습니다.

DELETE FROM emailNotification
WHERE jobId IN (
 SELECT jobId FROM jobs j
 WHERE j.active = 1
)

두 번째 테이블에서 관계가 있는 첫 번째 테이블의 행을 삭제하는 것과 같이 일치하는 행을 삭제하는 것이 목적이라면 두 번째 테이블에 대해 "위치" 조건을 추가해야 합니다.

DELETE f FROM firsttable f 
LEFT JOIN secondtable s ON f.related_id = .jobId 
WHERE s.related_id

언급URL : https://stackoverflow.com/questions/4154707/delete-from-one-table-with-join

반응형