Faktiskt nej, det finns inget smartare sätt att skriva detta (utan att besöka Y två gånger) med tanke på att X som myTable.X och myTable.YY matchar kanske inte kommer från samma rad.
Som ett alternativ är EXISTS-formen för frågan
select *
from myTable A
where exists (select * from Y where A.X = Y.X)
and exists (select * from Y where A.XX = Y.X)
Om Y innehåller X-värden på 1,2,3,4,5
och x.x = 2
och x.xx = 4
, de finns båda (på olika poster i Y) och posten från myTable ska visas i utdata.
EDIT:Detta svar tidigare sade att You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. SOM Martin har påpekat är detta inte sant (absolut inte för SQL Server 2005 och högre). Se länkar
- http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/