Vous n'êtes pas identifié(e).

#1 22/12/2015 12:18:07

Mlan2
Membre

Requête incorrecte utilisant la clause With

Bonjour,

Je transpose sous PostgreSQL quelques requêtes écrites initialement sous Oracle.

J'ai la requête ci-dessous qui me pose problème.

CREATE TABLE temp_res AS
 SELECT hierar FROM (WITH req1 as (SELECT DISTINCT hierar FROM sfphierd 
                               UNION
                              SELECT DISTINCT hierar FROM sfpsupl)
 SELECT DISTINCT groupe,libelle FROM sfpgrps WHERE groupe NOT IN (SELECT DISTINCT grouph FROM hopempl)
  INTERSECT
 SELECT DISTINCT hierar,libelle FROM sfphierg WHERE hierar NOT IN (SELECT * FROM req1)
);	

J'ai le message suivant lorsque je l'exécute :

la sous-requête du FROM doit avoir un alias

Avez vous une idée sur la nature de l'erreur, et comment la transposer ?

D'avance merci de vos retours.

Hors ligne

#2 22/12/2015 12:37:25

Mlan2
Membre

Re : Requête incorrecte utilisant la clause With

Désolé,

Je n'ai fourni la bonne requête posant problème.

La voici ci-dessous :

CREATE TABLE temp_res AS
 SELECT * FROM (WITH req1 as (SELECT DISTINCT hierar FROM sfphierd 
                               UNION
                              SELECT DISTINCT hierar FROM sfpsupl)
 SELECT DISTINCT groupe,libelle FROM sfpgrps WHERE groupe NOT IN (SELECT DISTINCT grouph FROM hopempl)
  INTERSECT
 SELECT DISTINCT hierar,libelle FROM sfphierg WHERE hierar NOT IN (SELECT * FROM req1)
);	

Hors ligne

#3 22/12/2015 12:41:32

Mlan2
Membre

Re : Requête incorrecte utilisant la clause With

En modifiant la requête comme ci-dessous, on contourne le problème de l'usage du WITH :

SELECT * FROM (
 SELECT DISTINCT groupe,libelle FROM sfpgrps WHERE groupe NOT IN (SELECT DISTINCT grouph FROM hopempl)
  INTERSECT
 SELECT DISTINCT hierar,libelle FROM sfphierg WHERE hierar NOT IN (SELECT DISTINCT hierar FROM sfphierd 
                                                                    UNION
                                                                   SELECT DISTINCT hierar FROM sfpsupl)
) as req1;

Quel serait le bon usage du WITH ?

Hors ligne

#4 22/12/2015 15:16:30

rjuju
Administrateur

Re : Requête incorrecte utilisant la clause With

Le bon usage serait de rajouter un alias à la sous requête, comme l'indique l'erreur.

Par exemple :

select * from (with toto as (select 1) select * from toto);
ERROR:  subquery in FROM must have an alias
LINE 1: select * from (with toto as (select 1) select * from toto);
                      ^
HINT:  For example, FROM (SELECT ...) [AS] foo.

select * from (with toto as (select 1) select * from toto) AS s;
 ?column? 
══════════
        1
(1 row)

Time: 1.325 ms

Hors ligne

#5 22/12/2015 18:58:02

Mlan2
Membre

Re : Requête incorrecte utilisant la clause With

Merci de la réponse.

Hors ligne

Pied de page des forums