В основном я создал несколько таблиц для игры: у меня есть две основные таблицы и таблица со многими из многих. Вот DDL: (я использую 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);
Я хочу создать ВЕЬЕТЕ, который удаляет сирот из JOB (если существует только одна запись в соединительной таблице для конкретной работы) на основе ЛИЧНОСТИ .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
Где X является некоторое person_id. Я пробовал много разных способов; Я думаю, что это часть «COUNT», которая вызывает проблемы. Я новичок в SQL, поэтому любая помощь была бы высоко оценена.
Я не совсем ясно, по этому вопросу. Сироты в таблице заданий не будут иметь соответствующей записи в таблице job_person. – Dave
По словам Дэйва я не понимаю, почему вы пытаетесь удалить данные, которые используются в другой таблице ... – Fred
Это функциональность я искал: DELETE FROM JOB WHERE JOB_ID NOT IN (SELECT, JOB_ID ОТ JOB_PERSON ) – systemoutprintln