반응형
여러 값에 일치하는 Oracle 행 삭제
다음과 같은 작업을 수행하고 싶습니다.
DELETE FROM student WHERE
student.course, student.major IN
(SELECT schedule.course, schedule.major FROM schedule)
그러나 IN 연산자에는 하나의 열만 사용할 수 있는 것 같습니다.진짜예요?이런 질문이 가능할 것 같습니다.
아니요, 괄호만 있으면 됩니다.
DELETE FROM student WHERE
(student.course, student.major) IN
(SELECT schedule.course, schedule.major FROM schedule)
다음과 같이 EXISTES 절을 사용할 수도 있습니다.
DELETE FROM student WHERE
EXISTS
(
SELECT 1 FROM schedule
WHERE schedule.course=student.course
AND schedule.major=student.major
)
DELETE FROM student WHERE
(student.course, student.major) IN
(SELECT schedule.course, schedule.major FROM schedule)
where 절에서 용어 주위에 괄호를 두르세요.건배!
Oracle에서는 인라인 보기에서 삭제를 수행할 수 있지만 일반적으로 행이 삭제된 테이블의 행을 보기에서 둘 이상의 행으로 표시할 수 없도록 하는 외부 키가 필요합니다.
create table parent (id number primary key);
create table child (id number primary key, parent_id number references parent);
insert into parent values(1);
insert into child values(2,1);
delete from (select * from parent p, child c where c.parent_id = p.id);
특성이 null인 경우 행은 IN이 아닌 것으로 간주됩니다.즉, 과정이 같고 학생 및 스케줄 전공이 모두 null인 경우 행은 삭제되지 않습니다.
major와 같은 속성이 null일 수 있고 null = null을 참으로 만들려면 다음을 시도합니다.
DELETE
FROM student
WHERE (student.course, NVL(student.major,'sOmeStRinG') )
IN (SELECT schedule.course, NVL(schedule.major,'sOmeStRinG') FROM schedule)
아래 구문은 SQL Server에서 작동합니다.
하지만 나는 그것이 표준 sql이라고 믿습니다. 그러나 코멘트에서 지적했듯이 이는 비표준 구현이며 현재 Oracle에서 지원되지 않습니다.
참고로 남겨 두겠습니다.
delete s
from
student s
inner join schedule sch
on s.course=sch.course
and s.major = sch.major
언급URL : https://stackoverflow.com/questions/504060/oracle-delete-rows-matching-on-multiple-values
반응형
'programing' 카테고리의 다른 글
외부 종속성 org.spring 프레임워크를 확인할 수 없습니다.부트:spring-boot-boot: 리포지토리가 정의되지 않았기 때문 (0) | 2023.06.19 |
---|---|
도커를 사용할 때 mysql 연결이 닫혔습니다. (0) | 2023.06.19 |
비동기 하위 수집 데이터를 기반으로 한 VueJS 목록 정렬 (0) | 2023.06.19 |
Excel의 워크시트 암호 보호 작동 방식 (0) | 2023.06.19 |
스프링 부트 + 유레카 서버 + 하이스트릭스(터빈 포함): 빈 터빈.스트림 (0) | 2023.06.19 |