DECLARE @ID SMALLINT = (SELECT ID FROM ABD WHERE Name IN ('myName','yourName') ); SELECT * FROM XYZ WHERE ID IN (@ID)
Veuillez suggérer comment utiliser une variable dans la clause 'IN' dans SQL SERVER pour le scénario ci-dessus. Je sais que ce n'est pas la bonne façon. il y avait une question similaire avec un scénario différent, donc je ne pouvais pas get beaucoup d'aide de là aussi. Merci!
La meilleure approche serait d'utiliser une jointure à la place. Ce que vous essayez de faire ne va pas au travail.
SELECT * FROM XYZ x join ABD a on a.ID = x.ID where a.Name in ('myName', 'yourName')
Une variable ne peut stocker qu'une seule valeur. Vous pouvez vous débarrasser de la variable et faire une sous-requête dans la clause IN comme ceci:
SELECT * FROM XYZ WHERE ID IN ( SELECT ID FROM ABD WHERE Name IN ('myName','yourName') )
Ou cette sous-requête avec l'utilisation de EXISTS
, qui est préférée à IN
dans la plupart des cas parce que la sous-requête returnnera chaque ligne pour la clause IN
tandis que EXISTS
quittera la sous-requête tôt quand la condition sera remplie:
SELECT * FROM XYZ x WHERE EXISTS ( SELECT a.ID FROM ABD a WHERE a.Name IN ('myName','yourName') AND a.ID = x.ID )
Ou vous pouvez faire une INNER JOIN
avec l'autre table comme ceci:
SELECT x.* FROM XYZ x INNER JOIN ABD a ON a.ID = x.ID WHERE a.Name IN ('myName','yourName')
Le x.*
Veillera à ce que vous ne renvoyiez que des données de la table XYZ. Cela fournira également de meilleures performances que l'utilisation de sous-requêtes dans la plupart des cas.