J'ai fondamentalement créé quelques tables pour jouer avec: J'ai deux tables principales, et une table de jointure Many-Many. Voici le DDL: (J'utilise HSQLDB)SQL: suppression complexe
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);
Je veux créer une déclaration de suppression qui supprime les orphelins du (s'il existe une seule entrée dans la table de jointure pour un travail spécifique) en fonction de la personne .PERSON_ID.
En pseudo langue:
delete from job where job_person.job_id=job.job_id
AND count(job_person.job_id)=1 AND job_person.person_id=X
Où X est une person_id. J'ai essayé beaucoup de manières différentes; Je pense que c'est la partie "COUNT" qui cause des problèmes. Je suis une recrue SQL, donc toute aide serait très appréciée.
Je ne suis pas tout à fait clair sur la question. Les orphelins de la table de travail n'auraient pas d'entrée correspondante dans la table job_person. – Dave
Selon Dave, je ne comprends pas pourquoi vous essayez de supprimer des données qui sont utilisées par une autre table ... – Fred
Ceci est la fonctionnalité que je cherchais: SUPPRIMER DE TRAVAIL OÙ JOB_ID PAS ( SELECT JOB_ID FROM JOB_PERSON ) – systemoutprintln