Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/03/2010, à 13:10

Ubutux

[Résolu] SQL : faire un UPDATE avec JOINTURE ??

Hello!

Je vous explique mon problème, qui est simple à comprendre, mais pour lequel je ne trouve pas de solutions.... sad

J'ai 3 tables :
- photo
- article_photo
- article

Dans la table photo, certaines photos n'ont pas de titre (title) : soit le champ title est vide, soit il est NULL.

Le but est de remplir les champs titre des photos vides ou NULL par le titre des articles correspondant à ces photos (dont la correspondance se fait par la table article_photo)

Voila ma requête:

UPDATE photo
SET photo.title = article.title
FROM photo
JOIN article_photo ON article_photo.photo = photo.id
JOIN article ON article.id = article_photo.article
WHERE photo.title IS NULL OR photo.title = ''

J'ai une erreur en retour... Si je fais un SELECT article.title, photo.title avec mes jointures et mon WHERE, tout baigne, il me sort bien ce que je veux, par contre il ne veut pas de mon UPDATE.... sad

Si quelqu'un à une idée, car j'avoue que je suis une véritable quiche en SQL....

Dernière modification par Ubutux (Le 22/03/2010, à 13:54)


Cordialement Ubutux,
========================
Mon petit blog friendly froggy, mon site de cours de droit et mon agence web

Hors ligne

#2 Le 17/03/2010, à 22:47

Ubutux

Re : [Résolu] SQL : faire un UPDATE avec JOINTURE ??

Aucune suggestion ??


Cordialement Ubutux,
========================
Mon petit blog friendly froggy, mon site de cours de droit et mon agence web

Hors ligne

#3 Le 17/03/2010, à 23:59

Kanor

Re : [Résolu] SQL : faire un UPDATE avec JOINTURE ??

La doc la doc
alors pour mysql on trouve ça
http://dev.mysql.com/doc/refman/5.0/fr/update.html

Depuis MySQL version 4.0.4, vous pouvez aussi faire des opérations de UPDATE qui couvrent plusieurs tables :

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

L'exemple ci-dessus montre une jointure interne, en utilisant la virgule comme séparateur, mais une commande UPDATE multi-table peut utiliser n'importe quel type de jointure autorisée dans une commande SELECT, tel qu'un LEFT JOIN.

pour postgresql
ça semble  possible
http://www.postgresql.org/docs/8.4/static/sql-update.html

A list of table expressions, allowing columns from other tables to appear in the WHERE condition and the update expressions. This is similar to the list of tables that can be specified in the FROM  Clause of a SELECT statement. Note that the target table must not appear in the fromlist, unless you intend a self-join (in which case it must appear with an alias in the fromlist

pour les autre SGBD voir la doc

Dernière modification par Kanor (Le 18/03/2010, à 00:01)

Hors ligne

#4 Le 18/03/2010, à 10:32

Ubutux

Re : [Résolu] SQL : faire un UPDATE avec JOINTURE ??

Salut Kanor!

Merci pour ta réponse! Tu sais la doc je l'ai lu en long en large et en travers et j'ai exploré le web pendant plusieurs jours avant de poster ce topic. En général je ne pose une question sur le forum que quand j'ai épuisé toute les autre solutions car j'aime bien trouver par moi même smile

La requête que tu cite en 1er, c'est la première sur laquelle je me suis penché. Elle fonctionne mais sur des tables qui ont des clés communes, dans mon cas article_photo & photo ou article et article_photo. Mais pas si j'ai une table entre les 2. Là j'ai 3 tables donc cela ne peut pas marcher. D'où la jointure....

J'ai beau me creuser le crane dans tous les sens je trouve pas la solution... ou alors en bidouillant avec des views etc mais ça va être du travail de sagouin...

Dernière modification par Ubutux (Le 18/03/2010, à 10:33)


Cordialement Ubutux,
========================
Mon petit blog friendly froggy, mon site de cours de droit et mon agence web

Hors ligne

#5 Le 18/03/2010, à 10:40

Kanor

Re : [Résolu] SQL : faire un UPDATE avec JOINTURE ??

Ubutux bah excuse moi alors c'est l'habitute de  tomber sur des personnes qui ne lisent pas la doc.
Au final tu utilise quel sgbd ?

Hors ligne

#6 Le 22/03/2010, à 10:53

Ubutux

Re : [Résolu] SQL : faire un UPDATE avec JOINTURE ??

Salut Kanor!

Désolé de répondre si tard, j'étais en week-end

Ils utilisent du MySQL.


Cordialement Ubutux,
========================
Mon petit blog friendly froggy, mon site de cours de droit et mon agence web

Hors ligne

#7 Le 22/03/2010, à 13:53

Ubutux

Re : [Résolu] SQL : faire un UPDATE avec JOINTURE ??

J'ai trouvé! smile

UPDATE photo
JOIN article_photo ON article_photo.photo = photo.id
JOIN article ON article.id = article_photo.article
SET photo.title = article.title
WHERE photo.title IS NULL OR photo.title = ''

Donc pas de FROM et faire le SET après la jointure. Pour le FROM je savais que c'était faux, par contre c'est un pur hasard si j'ai changé le SET de place...

Voili, voilou et merci pour ton aide Kanor smile


Cordialement Ubutux,
========================
Mon petit blog friendly froggy, mon site de cours de droit et mon agence web

Hors ligne