Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Tue 11 April 2017 09:44

BorisP
Participant occasionnel
Date d'inscription: 10 May 2016
Messages: 25

[PostGreSQL] Aide sous-requête simple

Bonjour à tous,
je fais appel à votre aide car je bloque sur une sous-requête  assez simple je pense.
Je souhaiterais créer une table avec ces paramètres :

1. Extraire de la table totale, les codes de la colonne apet700 équivalant à 5224A et 5222Z
2. Mais précision pour 5222Z, ne prendre seulement les entités contenant le mot « port » OU « zone portuaire » OU « enceinte portuaire » en excluant ceux avec le mot « lamanage » OU « lamaneurs » dans les colonnes l1_normalisee OU l2_normalisee OU l3_normalisee

J'en suis là :


CREATE TABLE boris.ports_transports AS

SELECT * FROM boris.sirene
where "apet700" ilike '5222Z%' and
    (SELECT * FROM boris.sirene where "l1_normalisee" ilike '%port%' and not "l1_normalisee" ilike '%lama%' or "l2_normalisee" ilike '%port%' and not "l2_normalisee" ilike '%lama%' or "l3_normalisee" ilike '%port%' and not "l3_normalisee" ilike '%lama%'
    )
or "apet700" ilike '5224A%'


L'erreur me dit :

ERREUR:  la sous-requête doit renvoyer une seule colonne
LINE 4:     (SELECT * FROM boris.sirene where "l1_normalisee" ilike ...

et quand je met le champs "apet700" à la place de * dans la sous-requête

ERREUR:  l'argument de AND doit être de type booléen, et non du type character varying
LINE 3:     (SELECT "apet700" FROM boris.sirene where "l1_normalisee...

J'ai essayé avec WITH, AS, IN à la place du premier AND mais sans succès
Je pense que ma formulation globale est mauvaise
Merci beaucoup d'avance!
Cordialement,

Hors ligne

 

#2 Tue 11 April 2017 10:12

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: [PostGreSQL] Aide sous-requête simple

Bonjour,

Oui, syntaxe pas bonne du tout.
Pourquoi faites-vous deux fois un SELECT * sur la meme table ?

Dans un WHERE, chaque condition doit etre booléenne (vraie/fausse). Là, ca donne: ...AND (SELECT...)

Je vous invite à apprendre un peu le SQL, par ex sur ces bons tutoriaux: https://sql.developpez.com/

Nicolas

Hors ligne

 

#3 Tue 11 April 2017 11:35

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 722

Re: [PostGreSQL] Aide sous-requête simple

Bonjour,

effectivement comme le souligne Nicolas, il vaut mieux reprendre les bases.

Pour ce qui est de votre requête cela doit plus ressembler à quelques choses comme cela :

Code:

select * from boris.sirene
where
("apet700" ilike '5222Z%' and (
    ("l1_normalisee" ilike '%port%' and not "l1_normalisee" ilike '%lama%') or 
    ("l2_normalisee" ilike '%port%' and not "l2_normalisee" ilike '%lama%') or 
    ("l3_normalisee" ilike '%port%' and not "l3_normalisee" ilike '%lama%')
    )
)
or 
"apet700" ilike '5224A%'

Cordialement,

Dernière modification par lejedi76 (Tue 11 April 2017 11:35)

Hors ligne

 

#4 Tue 11 April 2017 11:39

BorisP
Participant occasionnel
Date d'inscription: 10 May 2016
Messages: 25

Re: [PostGreSQL] Aide sous-requête simple

Oui effectivement merci, suite au message de Nicolas j'ai enlevé le deuxième select et cela a fonctionné.

Dernière modification par BorisP (Tue 11 April 2017 14:09)

Hors ligne

 

Pied de page des forums

Powered by FluxBB