In realtà no, non c'è un modo più intelligente per scrivere questo (senza visitare Y due volte) dato che la X a cui myTable.X e myTable.YY corrispondono potrebbero non essere della stessa riga.
In alternativa, la forma EXISTS della query è
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 contiene valori X di 1,2,3,4,5
e x.x = 2
e x.xx = 4
, esistono entrambi (su record diversi in Y) e il record di myTable dovrebbe essere mostrato in output.
EDIT:questa risposta in precedenza ha dichiarato che You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. Come ha sottolineato Martin, questo non è vero (certamente non per SQL Server 2005 e versioni successive). Vedi link
- http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/