Requette select where in et not in

MoZ -  
 Utilisateur anonyme -
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonsoir, pourquoi pas:
Select * from table1 where value1 in (3,9)
0
Utilisateur anonyme
 
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
 
Bonsoir

Oui, pas de problème, ça marche.
0
MoZ
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
et si tu fais uniquement le "out", pour vérifier qu'il est correct?
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
Utilisateur anonyme
 
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