Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#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
Julien.
https://rjuju.github.io/
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
Pages : 1