Bonjour à tous,
Voici mon problème SQL :
J'ai deux tables plus une table d'association
TABLE1
------
T1_ID
Association
-----------
T1_ID
T2_ID
TABLE2
------
T2_ID
TYPE_OBJ
Et une requête de suppression du style : "Supprimer tous les objets Table1 associés à un objet Table2 de type 'truc' ".
Ce qui donnerait :
Sauf que ça va pas marcher. En effet, on ne peut pas supprimer les objets Table1 sans perdre l'intégrité de la base parce qu'ils sont encore référencés dans la table Association.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DELETE FROM Table1 WHERE Table1.T1_ID IN ( SELECT Table1.T1_ID FROM Table1 INNER JOIN Association ON Association.T1_ID = Table1.T1_ID INNER JOIN Table2 ON Table2.T2_ID = Association.T2_ID WHERE Table2.Type_Obj = 'truc' )
Et si je supprime d'abord les lignes de la table Association qui référencent les objets Table1 qu'on veut supprimer, ma première requête ne marchera plus (impossible de retrouver les objets Table1 associés à des objets Table2 de type 'truc' vu que... les association auront été supprimées).
Comme je sens qu'il y a des petits malins dans l'assistance je vois arriver la solution : "Tu mets un ON DELETE CASCADE sur tes clés étrangères".
Ouais.
Sauf que.
On était jeunes, on était fous et on a pas mis de contraintes quand on a créé la base . Dommage parce qu'actuellement on a pas forcément le droit de retoucher à la structure de la base.
Donc il me faut une autre solution. D'avance merci
Base de données : Mysql 5
Partager