Le but detruire des enregistrements en fonction d'une conditon sur une autre table
c'est de l'utopie ou il y a de l'idée ???Code:
1
2 DELETE FROM zonage z JOIN contacts c ON c.id_comm=z.idcomm_zone WHERE c.champ_comm='30'
Version imprimable
Le but detruire des enregistrements en fonction d'une conditon sur une autre table
c'est de l'utopie ou il y a de l'idée ???Code:
1
2 DELETE FROM zonage z JOIN contacts c ON c.id_comm=z.idcomm_zone WHERE c.champ_comm='30'
je dirais plutôt :
Code:
1
2
3
4
5 DELETE FROM zonage USING zonage z JOIN contacts c ON c.id_comm=z.idcomm_zone WHERE c.champ_comm='30';
à tester :)
Il y a de l'idée ;).
Tu peux t'inspirer d'un exemple dans la FAQ : ici.
Tu as juste à remplacer par un INNER JOIN et changer la condition, et le tour est joué :D.
ced
marche pas :(Code:
1
2
3
4 DELETE FROM zonage z LEFT JOIN contacts c ON c.nom_comm = z.idcomm_zone WHERE c.nom_comm='TRUC'
[edit ...]
ceci oui ...
il sert à quoi le z là ????Code:
1
2
3
4 DELETE z FROM zonage z LEFT JOIN contacts c ON c.id_comm = z.idcomm_zone WHERE c.nom_comm='TRUC'
si je rajoute :
il efface dans les deux tables ?Code:DELETE z, c FROM zonage z
Le z indique que tu supprimes dans la table zonage.
Si tu mets les 2, je n'ai jamais testé, mais je pense que ça renverra une erreur.
Essaie dans une transaction en faisant un rollback à la fin (pour annuler la suppression), si tu es en InnoDB, bien sûr...
ced
je vais tesrer avec des enregistrements fake ...
merci en tout cas por la syntaxe !
ça fonctionne comme escompté pour l'effacement dans une table,
je vous tiendrais au courant sur deux ...
je mets comme résolu ;) :king:
Test effectué et positif :king:
efface bien dans les deux tables et n'efface que les id correspondants, meêm si il y a plusieurs noms identiques, seul le nom avec id est effacé !!Code:DELETE z,c FROM zonage z LEFT JOIN contacts c ON c.id_comm=z.idcomm_zone WHERE c.nom_comm='TRUC'
Excellent à savoir :king:.
Pas sûr que ça soit dans la norme SQL, mais c'est une fonctionnalité pratique de MySQL...
ced