#1 Tue 11 April 2017 09:44
- BorisP
- Participant occasionnel
- Date d'inscription: 10 May 2016
- Messages: 26
[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: 1554
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: 726
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: 26
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