Puissance de la clause IN

La clause IN permet de filtrer une requête sur un ensemble de valeurs, soit en les listant « en dur », soit pas une sous-requête.

Si ce n’est pas un opérateur que j’affectionne particulièrement puisqu’il n’est pas SARGable, en voici une utilisation assez puissante :

Créons donc la petite table suivante :

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE uneTable  
(
  id TINYINT IDENTITY
  , uneColonne TINYINT
  , uneAutreColonne TINYINT
  , uneNouvelleColonne TINYINT
)
 
INSERT INTO uneTable VALUES (1, 2, 100)
INSERT INTO uneTable VALUES (2, 100, 1)
INSERT INTO uneTable VALUES (100, 1, 2)

Vous devinez simplement le résultat de la requête suivante :

1
2
3
SELECT  id
FROM  dbo.uneTable
WHERE  uneColonne IN (1, 2)

qui retourne :

id

1
2

Mais quid ce celle-ci ? :)

1
2
3
SELECT  id
FROM  dbo.uneTable
WHERE  1 IN (uneAutreColonne, uneNouvelleColonne)

id

2
3

ElSüket

Laisser un commentaire