Na verdade, não, não há uma maneira mais inteligente de escrever isso (sem visitar Y duas vezes), dado que o X ao qual myTable.X e myTable.YY correspondem podem não ser da mesma linha.
Como alternativa, o formulário EXISTS da consulta é
select *
from myTable A
where exists (select * from Y where A.X = Y.X)
and exists (select * from Y where A.XX = Y.X)
Se Y contiver valores X de
1,2,3,4,5
e x.x = 2
e x.xx = 4
, ambos existem (em registros diferentes em Y) e o registro de myTable deve ser mostrado na saída. EDIT:esta resposta anteriormente afirmou que
You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. Como Martin apontou, isso não é verdade (certamente não para o SQL Server 2005 e superior). Ver links - http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/