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 : Général » FULL JOIN is only supported with merge-joinable join conditions » 30/06/2009 09:36:23

Je suis arrivé à faire ce que je voulais en enchaînant deux full join, comme je le pensais.
Encore merci pour votre aide.

#2 Re : Général » FULL JOIN is only supported with merge-joinable join conditions » 29/06/2009 16:18:06

D'accord, je vois le problème, c'est plutôt logique finalement, je me demande pourquoi Oracle accepte ça ...
Me voilà bien avancé, je vais donc devoir modifier la forme de la requête ...
Pensez vous qu'un FULL OUTER JOIN supplémentaire me permettrait d'arriver à un résultat similaire à celui souhaité au départ ?

Quelque chose du genre :

(...)
full outer join sad.CLIENT as "tab_cli1" on (r2.CLI2=tab_cli1.CLI_IDCLIENT)
full outer join sad.CLIENT as "tab_cli2" on (r2.CLI=tab_cli2.CLI_IDCLIENT)
(...)

#3 Re : Général » FULL JOIN is only supported with merge-joinable join conditions » 29/06/2009 14:57:26

Merci pour votre réponse rapide.

CLI_IDCLIENT est de format Numeric, et CLI ET CLI2 également vu que ce sont des alias de CLI_IDCLIENT.
J'avoue ne pas comprendre le problème, pourquoi PostgreSQL ne saurait il pas trier les colonnes ?

#4 Général » FULL JOIN is only supported with merge-joinable join conditions » 29/06/2009 14:44:54

Galomu
Réponses : 7

Bonjour,

Je suis en train de migrer une application BI d'Oracle vers PostgreSQL 8.3.
Je dois donc modifier chacune des requêtes SQL de façon à les adapter à Postgres. Il n'y pas de problème pour la majorité d'entre elles, mais certaines soulèvent une erreur : "FULL JOIN is only supported with merge-joinable join conditions"

J'ai beau chercher et essayer plusieurs choses, je ne trouve pas la solution.
Voici un exemple de requête posant problème :

------

select  sum(CA), sum(Marge), Annee,sum(CA2), sum(MArge2),Annee2, CLI_NOMCLIENT from
          (select sum(BUD_CARVALEUR) as CA ,sum(BUD_MAVALEUR) as Marge ,PER_NUMANNEE as Annee,CLI_IDCLIENT as Cli, AGE_LIBAGENCE as agence
        from sad.CLIENT left outer join sad.IND_BUDGET on CLI_IDCLIENT=BUD_IDCLIENT
          inner join sad.PERIODE on BUD_IDPERIODE=PER_IDPERIODE
          inner join sad.SITE on BUD_IDSITE=SIT_IDSITE 
          inner join sad.AGENCE on SIT_IDAGE=AGE_IDAGE
        where  PER_IDPERIODE between 1 and 6
          and AGE_NUMAGENCE like '44'
        group by PER_NUMANNEE,CLI_IDCLIENT,AGE_LIBAGENCE) r1

 full outer join

        (select sum(BUD_CARVALEUR) as CA2 ,sum(BUD_MAVALEUR) as Marge2 ,PER_NUMANNEE as Annee2 ,CLI_IDCLIENT as Cli2
        from sad.CLIENT left outer join sad.IND_BUDGET on CLI_IDCLIENT=BUD_IDCLIENT
          inner join sad.PERIODE on BUD_IDPERIODE=PER_IDPERIODE
          inner join sad.SITE on BUD_IDSITE=SIT_IDSITE 
          inner join sad.AGENCE on SIT_IDAGE=AGE_IDAGE
        where  PER_IDPERIODE between 7 and 13
          and AGE_NUMAGENCE like '44'
        group by PER_NUMANNEE,CLI_IDCLIENT) r2

on r1.CLI=r2.CLI2 
full outer join sad.CLIENT on (r2.CLI2=CLI_IDCLIENT  or r1.CLI=CLI_IDCLIENT )
where CA is not null or CA2 is not null
group by (CLI_NOMCLIENT)
order by CLI_NOMCLIENT

------

L'erreur disparait si j'enlève dans le dernier "full outer join" 'r2.CLI2=CLI_IDCLIENT' ou 'r1.CLI=CLI_IDCLIENT'

Pouvez vous me dire ce que signifie cette erreur, et comment y remédier ?

Merci d'avance.

Pied de page des forums

Propulsé par FluxBB