PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 23/04/2013 16:59:46

azery16
Membre

problème avec WITH et UPDATE

Bonjour,

Je débute avec Postgresql. J’ai créé 4 tables t1, t2, t3, t4. Je les ai liées ensemble et j’ai fait quelques calculs via des sous requêtes et finalement j’obtiens une table de données t7 dont l’avant dernière colonne s’appelle c5 (type : double precision) et la dernière colonne s’appelle c6 (type : integer). La colonne c6 est en réalité une simple copie de la colonne c6 de la table t1 créée au départ:

WITH t5 AS (SELECT…..), t6 AS (SELECT …), t7 AS (SELECT …) SELECT * FROM t7

J’aimerais maintenant modifier la colonne c6 de ma table temporaire t7 (ou la colonne c6 de ma table t1) en fonction d’un critère (critère = c5 < 0.5).

J’ai essayé ceci :

WITH t5 AS (SELECT…..), t6 AS (SELECT …), t7 AS (SELECT …) UPDATE t7 SET c6 = 1 WHERE c3 < 0.5

Et des variantes. Sans résultats. Message : la relation t7 n’existe pas.

Quelqu’un aurait-il une suggestion ? Merci.

Hors ligne

#2 23/04/2013 21:44:18

gleu
Administrateur

Re : problème avec WITH et UPDATE

Avec si peu d'infos, non smile

Par contre, il est clair que t7 n'étant que le résultat d'une requête SELECT, PostgreSQL n'a aucun moyen de faire ça. Attention, je ne dis pas que ce que vous cherchez à faire est impossible. Je dis juste que le message d'erreur ne m'étonne pas et qu'il est logique. Maintenant, avec plus d'infos de votre part, peut-être qu'on pourrait mieux vous aider...


Guillaume.

Hors ligne

#3 25/04/2013 11:59:17

azery16
Membre

Re : problème avec WITH et UPDATE

Merci pour ta réaction.

J’y suis finalement parvenu mais de façon incomplète. On suppose que la table t1 dispose d’un champ t1.id et d’un champ t1.c6 que je souhaite mettre à jour en fonction de résultats obtenus via plusieurs requêtes, la dernière s’appelant t7. Cette dernière contient un champ t7.c3 qui est un critère (valeur : 0 à 1) pour réaliser mon UPDATE et un champ t7.c6 qui est en réalité le champ c6 de la table t1. La requête complète devient.

WITH t5 AS (SELECT…..), t6 AS (SELECT …), t7 AS (SELECT …) UPDATE t1 SET c6 = 1 WHERE t7.c3 < 0.5 AND t1.id = t7.id;

Mon problème maintenant, c’est que je souhaite faire plusieurs requêtes UPDATE sur le champ t1.c6 et donc t7.c6 en fonction de différentes valeurs prises par t7.c3 (ex. : c6 = 1 si  c3 <= 0.5 ; c6 = 2 si c3 > 0.5 et C3 <= 0.8 ; c6 = 3 si c3 > 0.8) et au final afficher ma table temporaire t7 (ex. : SELECT * FROM t7) mise à jour. Je vais tenter quelques essais mais si quelqu’un a déjà une suggestion, je suis évidemment preneur. wink

Hors ligne

Pied de page des forums