Pourriez-vous s'il vous plaît m'aider à résoudre ce problème: J'ai 3 tables:

Table Name1: Contact

cnt_id, CNTName

12,     test
13,     test2


Table Name2: Relation

cnt_id, r_grpid

12,     55
13,     55
13,     56

Table Name3: Group

grp_1d, 

55
56

Ce que je cherche à faire, c'est lorsque je supprime l'ID de groupe 55 de la table GROUP les enregistrements de la table CONTACT sont supprimés en conséquence. Mais comme vous pouvez le voir, CNT_id 13 est également lié à un autre groupe dans ce cas CNT_id 13 ne doit PAS être supprimé.

Cordialement

0
iman 27 juil. 2017 à 12:32

3 réponses

Meilleure réponse

Si la combinaison de cnt_id et r_grpid dans Relation est unique, vous pouvez utiliser la requête suggérée auparavant mais avec un filtre supplémentaire sur le cnt_id, comme ceci:

declare  @groupId  int =55

delete from  Contact where cnt_id in  (select C.cnt_id from Contact C
inner  join Relation R  on R.cnt_id=C.cnt_id  where R.r_grpid =@groupId AND cnt_id not in (select cnt_id from Relation group by cnt_id having count(*) > 1))

delete from   Relation where  r_grpid =@groupId AND cnt_id not in (select cnt_id from Relation group by cnt_id having count(*) > 1)

delete from  Group where  r_grpid =@groupId 
0
moons 27 juil. 2017 à 13:53

Peut-être qu'un déclencheur peut vous aider, j'ai fait ce qui suit dans le développeur SQL:

insert into contact values (12, 'abc');
insert into contact values (13, 'def');

insert into relation values (12, 55);
insert into relation values (13, 55);

insert into grouptab values (55);

Puis a ouvert une session dans sqlplus

Créé un déclencheur

SQL> CREATE OR REPLACE TRIGGER delete_data
  2  BEFORE delete
  3   ON grouptab
  4  REFERENCING NEW AS New OLD AS Old
  5  FOR EACH ROW
  6  DECLARE
  7  BEGIN
   delete from contact where contact_uid in (select contact_uid from relation where group_uid = :old.GROUP_uID);
END delete_data;

SQL> select * from contact;

CONTACT_UID CONTACT_NAME
----------- ------------------------------
         12 abc
         13 def

SQL> select * from relation;

CONTACT_UID  GROUP_UID
----------- ----------
         12         55
         13         55

SQL> select * from grouptab;

 GROUP_UID
----------
        55

SQL> delete from grouptab;

1 row deleted.

SQL> delete from contact;

0 rows deleted.

Veuillez essayer de suivre:

Supprimer de la relation rel où group_uid dans (55) et 1 = (sélectionnez count (*) de la relation où contact_uid = rel.contact_uid);

1
deepakl 27 juil. 2017 à 12:53

Si vous supposez utiliser une requête ou une procédure stockée, cela sera utile.

declare  @groupId  int =55

delete from  Contact where cnt_id in  (select C.cnt_id from Contact C
inner  join Relation R  on R.cnt_id=C.cnt_id  where R.r_grpid =@groupId)

delete from   Relation where  r_grpid =@groupId

delete from  Group where  r_grpid =@groupId
2
Adikari Nadeesha 27 juil. 2017 à 09:48