Всъщност не, няма по-умен начин да напишете това (без да посещавате Y два пъти), като се има предвид, че X, на който отговарят myTable.X и myTable.YY, може да не е от един и същи ред.
Като алтернатива, формата EXISTS на заявката е
select *
from myTable A
where exists (select * from Y where A.X = Y.X)
and exists (select * from Y where A.XX = Y.X)
Ако Y съдържа X стойности на 1,2,3,4,5
и x.x = 2
и x.xx = 4
, и двата съществуват (в различни записи в Y) и записът от myTable трябва да бъде показан в изхода.
РЕДАКТИРАНЕ:Този отговор преди заяви, че You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. КАКТО посочи Мартин, това не е вярно (със сигурност не за SQL Server 2005 и по-нова версия). Вижте връзки
- http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/