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 Re : PL/pgSQL » Table temporaire + jointure » 10/08/2012 14:49:49

Donc en fait cela vient de la fonction SUM que j'utilise dans mon INNER JOIN

Voici m'a requête:

SELECT
  a, b, c, toto.d
FROM
  table_a
INNER JOIN table_b on .....
INNER JOIN table_c on ......
INNER JOIN table as toto on 
    toto.champs = (
        SELECT CASE
        WHEN (SUM (greatest (b.champs_1, b.champs_2, b.champs_3, b.champs_4))) = SUM (b.champs_1)
            THEN (SELECT id FROM table_x WHERE id = 'b.champs_1')
        WHEN (SUM (greatest (b.champs_1, b.champs_2, b.champs_3, b.champs_4))) = SUM (b.champs_2)
            THEN (SELECT id FROM table_x WHERE id = 'b.champs_2')
        WHEN (SUM (greatest (b.champs_1, b.champs_2, b.champs_3, b.champs_4))) = SUM (b.champs_3)
            THEN (SELECT id FROM table_x WHERE id = 'b.champs_3')
        ELSE (SELECT id FROM table_x WHERE id = 'b.champs_4')
        END
GROUP BY a, b, c, toto.d

Donc si je comprend bien, il faudrait utiliser un HAVING pour contourner cette erreur.

#2 PL/pgSQL » Table temporaire + jointure » 10/08/2012 10:33:32

llanowars
Réponses : 2

Bonjour,

Je vous écris car j'ai un problème.
Impossible de créer une table temporaire dans ma requête, mais au lieu de faire un long discours je vous écris ma requête:

SELECT
  a, b, c, toto.d
FROM
  table_a
INNER JOIN table_b on .....
INNER JOIN table_c on ......
INNER JOIN table as toto on toto.d = (
  SELECT CASE
     WHEN condition_1 THEN (SELECT e FROM table_e WHERE condition_e)
     WHEN condition_2 THEN (SELECT f  FROM table_f WHERE condition_f)
     WHEN condition_3 THEN (SELECT g FROM table_g WHERE condition_g)
     WHEN condition_4 THEN (SELECT h FROM table_h WHERE condition_h)
  END)

GROUP BY a, b, c, toto.d

Lors de l'éxécution de celle ci, j'ai cette erreur:

ERROR:  aggregates not allowed in JOIN conditions

********** Erreur **********

ERROR: aggregates not allowed in JOIN conditions
État SQL :42803

Elle me dit que je n'ai pas le droit de faire des jointures pour créer ma table temporaire.
La seule solution que j'ai trouvé c'est de mettre le CASE dans le SELECT.

SELECT
  a, b, c,
  CASE
     WHEN condition_1 THEN (SELECT e FROM table_e WHERE condition_e)
     WHEN condition_2 THEN (SELECT f  FROM table_f WHERE condition_f)
     WHEN condition_3 THEN (SELECT g FROM table_g WHERE condition_g)
     WHEN condition_4 THEN (SELECT h FROM table_h WHERE condition_h)
  END AS toto.d
FROM
  table_a
INNER JOIN table_b on .....
INNER JOIN table_c on ......

Mais je n'aime pas trop cette solution hmm

Si vous avez des idées je suis preneur car je n'ai rien trouvé sur le net.
Merci,

PS: Je debute en BDD.

Pied de page des forums

Propulsé par FluxBB