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