Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête où deux colonnes sont dans le résultat de la requête imbriquée

En fait non, il n'y a pas de façon plus intelligente d'écrire ceci (sans visiter Y deux fois) étant donné que le X auquel myTable.X et myTable.YY correspondent peut ne pas provenir de la même ligne.

Comme alternative, la forme EXISTS de la requête est

select *
from myTable A
where exists (select * from Y where A.X = Y.X)
  and exists (select * from Y where A.XX = Y.X)

Si Y contient X valeurs de 1,2,3,4,5 , et x.x = 2 et x.xx = 4 , ils existent tous les deux (sur des enregistrements différents dans Y) et l'enregistrement de myTable doit être affiché dans la sortie.

EDIT :cette réponse précédemment a déclaré que You could rewrite this using _EXISTS_ clauses which will work faster than _IN_ . Comme Martin l'a souligné, ce n'est pas vrai (certainement pas pour SQL Server 2005 et supérieur). Voir les liens