bonsoir,
J'ai un gros problème avec la requete delete... Je suis sous mysql 3.23.58 Voila ce que je voudrais faire :
J'ai une table 1 ou je ne fais que des insertions :
1) elle reprend les données d'une autre table 2
2) elle rajoute avec celle qui existeraient déjà dans la table 1
3) je crée une nouvelle entrée dans la table 1 qui fait la somme des entrées décrites ci dessus.
Au départ, je ne voulais pas faire comme ca.
Je voulais faire une sorte de if not exist insert else update mais je n'ai pas trouvé une syntaxe qui fonctionnait correctement sous mysql 3.23.58... Je ne peux pas vous donner la structure exacte de la table 1 mais voila en gros la description de la table1 :
- la clé primaire id
- 2 champs champ1 et champ2
- 1 champs nombre qui compte le nombre d'entrée du couple champ1 champ2 dans la table2
- un champ prix qui récupére le prix correspondant au champs1 et 2 dans une table3
Je voulais donc faire au début un update du prix dans la table2 à chaque fois mais ca ne fonctionne pas.. Pourquoi? parce que, avec update, je n'ai pas réussi à faire en sorte qu'il update toutes les lignes de ma table 1 en fonction de ce qu il trouve dans la table des prix. Il me met que je retourne dans mon select plus d'une entrée, ce qui est en fait normal...
J'en suis donc arrivé à l'insert comme solution...
Seulement voila mon problème :
Dans ma table 1 j'aurai donc 3 entrées pour chaque couple champ1 champ2. Je voudrai qu'il n'en reste qu'un seul donc pour différencier les couples, j'ai mis un champs date. Je voulais jsute garder le couple champ1 champ2 qui est le plus récent et supprimer les anciens.
Voila ma requête :
Ca ne fonctionne pas comme je veux, il me supprime toutes les entrées dans la table ou rien selon que je mette ou non le min avant le from...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DELETE FROM table1 WHERE ( champ1, champ2, unix_timestamp( created_on )) IN ( SELECT table1.champ1, table1.champ2, min( unix_timestamp( table1.created_on ) ) FROM table2 a WHERE a.champ1 = table1.champ1 AND a.champ2 table2.champ2 group by champ2);
Pourtant, qd j'isole le select, les résulats de la requêtes correspondent à celle que je veux ... Quelqu'un peut m'aider? C'est assez urgent...
Merci
Partager