PostGreSQL SELECT * WHERE

Résolu/Fermé
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 - 6 mars 2014 à 12:28
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 - 6 mars 2014 à 15:06
Bonjour, j'ai un problème très étrange avec une requête sur une base de données PostGreSQL.

Lorsque j'effectue la requête suivante :

SELECT * FROM prod_purchase_order WHERE (part_number_part_id = 1 AND customer_id = 2) AND (customer_order_number NOT LIKE 'WIP%' OR starchip_order_num NOT LIKE 'WIP%');

J'obtiens bien les résultats qui sont dans ma base de données.
Par contre lorsque je modifie mon filtre sur customer_id pour qu'il soit égale à 6, je n'ai plus aucun résultat.

J'exécute mes requêtes sur le système de Query de PgAdmin, et j'ai vérifié que j'avais bien au moins une ligne dans la table contenant

part_number_part_id = 1 AND customer_id = 6

Je ne comprend pas... Avez vous une suggestion ?

4 réponses

Utilisateur anonyme
6 mars 2014 à 13:35
Bonjour

Ce que je ne comprends pas, c'est que tu nous présentes une requête avec une condition c1 AND c2 AND (c3 or c4) et que tu parles de vérification avec c1 AND c2 seulement.
As-tu essayé la requête complète avec PgAdmin ?
0
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 29
6 mars 2014 à 13:43
Bonjour le père, merci de ton intérêt.

Le but de ma requête est de me retourner toutes les lignes là où C1 et C2 ont des valeurs précises. Et si C3 ou C4 existe, je ne veux pas les lignes où ses lignes commence par 'WIP'.
Il arrive que C3 n'ai pas de valeur, ou bien c'est C4, ou bien aucune des deux.

J'exécute ces deux requêtes dans PgAdmin. J'ai essayé avec et sans ma condition sur C3 et C4. Même résultat.
0
Utilisateur anonyme
6 mars 2014 à 13:49
Soyons clairs : tu dis bien que
SELECT * FROM prod_purchase_order WHERE (part_number_part_id = 1 AND customer_id = 6)

ne te retourne aucun résultat alors que tu as des lignes contenant
part_number_part_id = 1 AND customer_id = 6
?
Tes champs part_number_part_id et customer_id sont-ils bien de type numérique ?
0
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 29
6 mars 2014 à 15:02
Ouf ! Ca fonctionne !
Merci le père tu m'a aiguillé avec ton premier message.
Lorsque je faisais :

SELECT * FROM prod_purchase_order WHERE (part_number_part_id = 1 AND customer_id = 6)

Je n'avais aucun retour car je ne faisait que commenter ma condition en dessous, ainsi que le point virgule. Je ne sais pas comment se débrouille pgAdmin mais ne n'avais aucun résultat avec :

SELECT * FROM prod_purchase_order WHERE (part_number_part_id = 1 AND customer_id = 6) 
-- and (customer_order_number NOT LIKE 'WIP%' OR starchip_order_num NOT LIKE 'WIP%');

Commentaire à la noix... autant que le dev vous m'direz ^^

Reste que pour ma condition il fallait gérer un test sur des champs vides. Pas mal galère, surtout avec la gestion des champs = null, ou qui sont vide, ou qui sont égal à zéro...

Je me suis perdu dans la doc postgre et voilà ce qui en ressort... très moche m'enfin...

SELECT * FROM prod_purchase_order WHERE (part_number_part_id = 1 AND customer_id = 6) AND (UPPER(SUBSTRING(COALESCE(customer_order_number, 'RIEN') FROM 1 FOR 3))  <> 'WIP');

Indigestion de fonction SQL. Probable qu'il y ai plus simple...

0
Leinox Messages postés 225 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 2 septembre 2015 29
6 mars 2014 à 15:06
Pour en savoir plus sur COALESCE : https://gktorrent-fr.fr/
0