Requette select where in et not in

Fermé
MoZ - Modifié le 23 avril 2017 à 22:57
 Utilisateur anonyme - 25 avril 2017 à 13:10
Bonjour,

Je cherche à effectuer une requette sur des éléments avec la clause where incluant des données d'un tableau et en excluant des données d'un tableau.

Ca ressemble a ca :

Select * from table1 where value1 in (3,6,9)
and value 1 not in (6)


en gros ce que je cherche à faire c'est que le "not in" exclue la valeur meme s'il se trouve inclue dans la 1ere ...

Est ce que je m'y prend bien ?

Merci de votre aide.

4 réponses

yg_be Messages postés 23196 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 septembre 2024 Ambassadeur 1 534
23 avril 2017 à 23:08
bonsoir, pourquoi pas:
Select * from table1 where value1 in (3,9)
0
Utilisateur anonyme
23 avril 2017 à 23:20
Bonsoir

Sûrement parce que ses listes sont des variables et qu'il ne sait pas a priori ce qu'il y a dedans.
0
Utilisateur anonyme
23 avril 2017 à 23:19
Bonsoir

Oui, pas de problème, ça marche.
0
C'est exactement ca, je ne sais pas ce qu'il y a dans le in et dans le out ! d'apres les tests que j'ai pu faire si une valeur se trouve dans le "in" et le "out" alors dans le "in" prime sur le "out"
En gros le out n'est pas pris en compte.
0
yg_be Messages postés 23196 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 septembre 2024 1 534
25 avril 2017 à 07:08
et si tu fais uniquement le "out", pour vérifier qu'il est correct?
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 avril 2017 à 11:03
Bonjour,

il n'y a pas d'histoire de "in" qui prime sur le "out". On est dans une logique purement booléenne, tu as un AND entre tes deux clauses, donc il faut nécessairement que les deux clauses soient vérifiées pour qu'une ligne se retrouve dans ton résultat.
Si ton "out" n'est pas pris en compte, c'est qu'il y a un autre problème (par exemple, dans la requête que tu as collée, il y a une espace entre le "value" et le "1"... Erreur de copie ?)

Peut-être qu'en nous donnant ton code complet (ta requête est bien générée dans un script autre ? En php peut-être ?) on pourrait pointer cette autre erreur.

Une autre solution, en exécutant la requête c'est de l'afficher à l'écran une fois générée (avec les variables remplacées par leur valeur) pour bien s'assurer qu'elle correspond à ce que tu veux.

Xavier
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
25 avril 2017 à 00:20
Bonjour,

Au pire .. avec un sous select

SELECT Q.*
FROM (
  SELECT T.* 
  FROM table1 T
  WHERE T.value1 IN ($varin)
)Q
WHERE Q.value1 NOT IN($varout)

0
Bonjour Jordane

Je ne comprends pas la logique qui t'amène à proposer une autre forme alors que sa requête est a priori correcte.
C'est conforter les gens dans l'opinion beaucoup trop répandue sur ce forum que programmer, c'est essayer des formules magiques au hasard jusqu'à ce qu'on tombe sur la bonne, plutôt que d'essayer de comprendre les règles des langages.
Il est clair que le problème de Moz n'est pas dans la forme de sa requête. Lui proposer de la changer, c'est l'induire en erreur en le laissant croire qu'elle est incorrecte.
0