Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Si vous avez des idées je suis preneur car je n'ai rien trouvé sur le net.
Merci,
PS: Je debute en BDD.
Pages : 1