필자는 기본적으로 두 개의 주 테이블과 Many-Many 조인 테이블을 가지고 놀 수있는 테이블을 만들었습니다. (I는 HSQLDB를 사용하고 있습니다)SQL : Complex Deletion
CREATE TABLE PERSON
(
PERSON_ID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
NAME VARCHAR(50), MAIN_PERSON_ID INTEGER
)
CREATE TABLE JOB
(
JOB_ID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
NAME VARCHAR(50)
)
CREATE TABLE JOB_PERSON
(
PERSON_ID INTEGER,
JOB_ID INTEGER
)
ALTER TABLE JOB_PERSON ADD
CONSTRAINT FK_PERSON_JOB FOREIGN KEY(PERSON_ID)
REFERENCES PERSON ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE JOB_PERSON ADD
CONSTRAINT FK_JOB_PERSON FOREIGN KEY(JOB_ID)
REFERENCES JOB ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE PERSON ADD
CONSTRAINT FK_PERSON_PERSON FOREIGN KEY(MAIN_PERSON_ID)
REFERENCES PERSON ON DELETE CASCADE ON UPDATE CASCADE
insert into person values(null,'Arthur', null);
insert into person values(null,'James',0);
insert into job values(null, 'Programmer')
insert into job values(null, 'Manager')
insert into job_person values(0,0);
insert into job_person values(0,1);
insert into job_person values(1,1);
내가 (특정 작업에 대한 조인 테이블에 하나의 항목 만이 존재하는 경우) 작업에서 고아를 삭제하는 DELETE 문을 생성 할 사람에 따라 다음은 DDL이다 .PERSON_ID. 의사 언어에서
: X 일부 person_id로입니다
delete from job where job_person.job_id=job.job_id
AND count(job_person.job_id)=1 AND job_person.person_id=X
. 나는 많은 다른 방법을 시도했다. 문제를 일으키는 것은 "COUNT"부분이라고 생각합니다. 나는 SQL 신참이다. 그래서 어떤 도움이라도 대단히 감사 할 것이다.
나는 질문에 완전히 명확하지 않다. 작업 테이블의 고아는 job_person 테이블에 해당 항목이 없습니다. 이 JOB JOB_ID NOT IN ( SELECT JOB_ID에서 삭제 : 당신이 다른 테이블에 의해 사용되는 데이터를 삭제하려고하는 이유 – Dave
데이브에 따르면 나는 이것이 내가 찾던 기능입니다 – Fred
... 이해하지 않는다 FROM JOB_PERSON ) – systemoutprintln