Bonjour
Je rêve ou sur mysql on ne peut pas faire comme sur Oracle par exemple
une requete du genre
update table set titi = 'toto' where id in (select id from table where....)
![]()
![]()
![]()
merci!!!
![]()
Bonjour
Je rêve ou sur mysql on ne peut pas faire comme sur Oracle par exemple
une requete du genre
update table set titi = 'toto' where id in (select id from table where....)
![]()
![]()
![]()
merci!!!
![]()
MySql sait gérer les requetes imbriquées a partir de la version 4.1 je crois.
Peut etre as tu une version plus ancienne ?
Tu peux le faire à partir de la version 4.1 seulement.
Sinon, tu peux certainement faire la même chose sans requête imbriquée, éventuellement avec une jointure.
Effectivement, j'ai la version 4.0![]()
Si j'installe la version 5.0, j'écrase ma base?
J'ai easyphp.
Que dois-je installer et comment pour ne pas avoir à tout refaire?![]()
Merci![]()
![]()
non. il suffit de faire une sauvegarbe du répertoire data et de la transférerdans la nouvelle version de MySQL.Envoyé par Garra
sinon, tout n'est pas à refaire, mais j'ai oublié la marche à suivre exacte.
Tu peux sans doute faire la même chose sans requêtes imbriquées, c'est quoi la requête que tu essayes de faire?
Ca y est! c'est fait et ça marche![]()
J'ai installé la version suivante de easyphp avec tout le tralala
et la version 4.1 de mysql
Mais pour info:
il me semble impossible de faire un update du genre (c'est un exemple):
udpate table1 set titi = toto where id in (select id from table2 where type = 'xxx')
avec une jointure....., le update ne le permet pas![]()
(c'est bizarre que mysql ait mis autant de temps à s'adapter à une
base comme oracle par exemple (celle que je préfère))
Merci à tous et chau chau chau![]()
![]()
![]()
![]()
Ah oui? Et ça alors?:Envoyé par Garra
Voir également:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 UPDATE table1 INNER JOIN table2 ON (table1.id = table2.id) SET table1.titi = toto WHERE table2.type = 'xxx'
http://www.developpez.net/forums/viewtopic.php?t=423925
Salut,
En suivant tes conseils j'ai fait
mais ça ne marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part UPDATE particule INNER JOIN particulegroupe ON ( particule.idNum = particulegroupe.idNum ) SET particule.dateAffichage = NOW( ) WHERE particule.idNum IN ( 2, 33, 32, 37, 11, 27, 29, 28, 14, 26, 45, 41, 48, 27, 40, 17, 45, 36, 26, 4, 1, 18, 30, 20, 31, 6, 38, 40, 2, 41, 27, 5, 25, 11, 43, 37, 38, 24, 16, 4, 2, 12, 45, 1, 40, 36, 18, 36, 24 ) AND particulegroupe.codeGroupe = 'FOND'
Merci de m'aider!!![]()
Bonjour et merci
Dès que j'enlève la condition
ça marche mais il me faut cette condition!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AND particulegroupe.codeGroupe = 'FOND'
Merci
En fait ça marche sur ma base local 4.1 mais le problème c'est que mon super hebergeur ne me mets à dispo que la version précédente de
mysql et là, ça ne marche pas!
MySQL a répondu:
C'est tout ce que j'ai comme erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3#1064 - You have an error in your SQL syntax near 'INNER JOIN particulegroupe ON ( particule.idNum = particulegroupe.idNum ) SET ' at line 1
Merci
C'est quelle version exactement ? On dirait qu'il ne supporte pas les UPDATE multi-tables...
J'ai peut-être une solution alternative:
1) tu créés une table temporaire
2) dans cette table temporaire, tu insères tous les enregistrements qui seront affectés par le changement:
3) tu fais ton UPDATE sur les enregistrements de ta table temporaire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 INSERT INTO table_temporaire SELECT table1.* FROM table1 INNER JOIN table2 ON ... WHERE ...
4) tu "commit" les changements dans la table de départ
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 UPDATE table_temporaire SET truc='bidulle'
5) tu nettoyes ta table temporaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 REPLACE INTO table1 SELECT * FROM table_temporaire
Du coup, plus de problème de version ou de syntaxe !
Code : Sélectionner tout - Visualiser dans une fenêtre à part TRUNCATE TABLE table_temporaire
Oui, j'avais pensé à faire quelque chose comme
cela mais c'est du bricolage insupportable.
J'ai fait oracle pendant 15 ans, et je inner join
n'était pas en tout cas à mon époque, utilisé.
T'en fais pas, je trouverais une solution plutôt côté mémoire (array)
car peu de données
Merci!!!
Salut
Je te remercie grace a ce topic j'ai trouvé la bonne syntaxe qui marche en effet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 UPDATE table1 INNER JOIN table2 ON (table1.id = table2.id) SET table1.titi = toto WHERE table2.type = 'xxx'
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager