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 :
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'
	)
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.
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