sql >> Base de Datos >  >> RDS >> Sqlserver

Consulta dónde están dos columnas en el resultado de la consulta anidada

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