Vlastně ne, neexistuje chytřejší způsob, jak to napsat (aniž byste dvakrát navštívili Y), protože X, se kterým se myTable.X a myTable.YY shodují, nemusí být ze stejného řádku.
Alternativně je forma dotazu 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)
Pokud Y obsahuje X hodnot 1,2,3,4,5
a x.x = 2
a x.xx = 4
, oba existují (na různých záznamech v Y) a záznam z myTable by měl být zobrazen ve výstupu.
UPRAVIT:Tato předchozí odpověď uvedl, že You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. Jak Martin zdůraznil, není to pravda (rozhodně ne pro SQL Server 2005 a vyšší). Viz odkazy
- http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/