Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 10/08/2012 10:33:32
- llanowars
- Membre
Table temporaire + jointure
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.
Hors ligne
#2 10/08/2012 11:30:58
- gleu
- Administrateur
Re : Table temporaire + jointure
Elle me dit que je n'ai pas le droit de faire des jointures pour créer ma table temporaire.
Pas du tout, le message indique que vous n'avez pas le droit de faire des agrégats dans une jointure. Comme vous avez tout détaillé sauf la requête de la jonction, difficile d'aller plus loin. La seule chose que je peux dire, c'est que vos deux requêtes ne sont pas équivalentes.
Guillaume.
Hors ligne
#3 10/08/2012 14:49:49
- llanowars
- Membre
Re : Table temporaire + jointure
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.
Hors ligne
Pages : 1