8722 sujets

Développement web côté serveur, CMS

Bonjour,

Je ne parviens pas à réaliser un update sur une jointure MySQL ... j'ai bien retourné internet, trouvé plusieurs solutions dont celle-ci qui revient souvent : http://www.friendly-froggy.net/2010/03/24/sql-faire-un-update-avec-jointures-sur-plusieurs-tables/ ; et pourtant j'ai toujours une erreur de ce genre : " SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN"

Je vous donne le requête utilisée en simplifié :

UPDATE
	table1 T1
SET
	T1.champ1 = 2, T1.champ2 = "2012-10-09 06:28:33"
JOIN table2 T2 ON T1.id = T2.id
WHERE
	T2.id = 16


J'ai aussi vu que certains utilisaient des "EXITS()" mais ça me parait "sale" ... sans avoir essayé pour autant. Selon vous quelle est la meilleure solution (et qui fonctionne ^^) ? Smiley smile
Merci d'avance Smiley smile
Modifié par Gaylord.P (10 Oct 2012 - 11:33)
Salut,

Y a un truc que je pige pas dans ton exemple:


JOIN table2 T2 ON T1.id = T2.id
WHERE T2.id = 16


Si T1.id = T2.id et que tu veut T2.id = 16, suffis de faire T1.id = 16, non?

Tu a la solution des sous requête qui pourra t'aider:


UPDATE table1 T1
SET T1.champ = (SELECT T2.champ
                        FROM table2 T2
                        WHERE T2.id = T1.id
                        AND T2.id = 16)


Mais encore une fois, dans ce contexte ça alourdis juste la requête...
Modifié par JJK801 (09 Oct 2012 - 09:52)
Salut ^^

Effectivement ; la vraie requête est beaucoup plus longue (et logique), j'ai simplifié l'exemple pour la lecture sur ce forum, sans doute un peu trop Smiley langue

Donc les sous-requêtes sont les solutions ... j'espérais que MySQL ait prévue les jointures également pour les UPDATE =/

Merci en tous cas Smiley smile
Je me souviens avoir utilisé un truc dans le style :

update T1,T2
set T1.champ1="blabla", T1.champ2=4
where T1.champ3=T2.champ2
AND T1.champ4=X


Après,c'est de tête, mais j'avais dû employer ça y a un bout de temps. D'ailleurs, mysql semble confirmer :

update sur table multiples

En pratique, le join doit se faire dans la partie table et pas dans la partie set (ce qui est finalement très logique ^^)


Edit : dans ton cas

UPDATE
	table1 T1 
		JOIN table2 T2 ON T1.id = T2.id
SET
	T1.champ1 = 2, T1.champ2 = "2012-10-09 06:28:33"
WHERE
	T2.id = 16

Modifié par Lothindil (09 Oct 2012 - 13:47)