Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
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.
Hors ligne
Pages : 1