Faktisk nej, der er ikke en smartere måde at skrive dette på (uden at besøge Y to gange), da det X, som myTable.X og myTable.YY matcher til, muligvis ikke er fra samme række.
Som et alternativ er EXISTS-formen for forespørgslen
select *
from myTable A
where exists (select * from Y where A.X = Y.X)
and exists (select * from Y where A.XX = Y.X)
Hvis Y indeholder X-værdier af 1,2,3,4,5
, og x.x = 2
og x.xx = 4
, de findes begge (på forskellige poster i Y), og posten fra myTable skal vises i output.
EDIT:Dette svar tidligere udtalte, at You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. SOM Martin har påpeget, er dette ikke sandt (i hvert fald ikke for SQL Server 2005 og nyere). Se links
- http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/