Nee, er is geen slimmere manier om dit te schrijven (zonder Y twee keer te bezoeken), aangezien de X waarmee myTable.X en myTable.YY overeenkomen, mogelijk niet uit dezelfde rij komt.
Als alternatief is de EXISTS-vorm van de zoekopdracht
select *
from myTable A
where exists (select * from Y where A.X = Y.X)
and exists (select * from Y where A.XX = Y.X)
Als Y X-waarden van 1,2,3,4,5
. bevat , en x.x = 2
en x.xx = 4
, ze bestaan allebei (op verschillende records in Y) en het record van myTable moet worden weergegeven in de uitvoer.
EDIT:dit antwoord eerder verklaarde dat You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. Zoals Martin heeft opgemerkt, is dit niet waar (zeker niet voor SQL Server 2005 en hoger). Zie links
- http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/