En realidad no, no hay una forma más inteligente de escribir esto (sin visitar Y dos veces) dado que la X con la que coinciden myTable.X y myTable.YY puede no ser de la misma fila.
Como alternativa, la forma EXISTS de la consulta es
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 contiene valores X de 1,2,3,4,5
, y x.x = 2
y x.xx = 4
, ambos existen (en diferentes registros en Y) y el registro de myTable debe mostrarse en la salida.
EDITAR:Esta respuesta anteriormente declaró que You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. Como ha señalado Martin, esto no es cierto (ciertamente no para SQL Server 2005 y superior). Ver enlaces
- http://explainextended.com/2009 /06/16/en-vs-unirse-vs-existe/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/