Eigentlich nein, es gibt keinen klügeren Weg, dies zu schreiben (ohne Y zweimal zu besuchen), da das X, auf das myTable.X und myTable.YY passen, möglicherweise nicht aus derselben Zeile stammt.
Alternativ ist die EXISTS-Form der Abfrage
select *
from myTable A
where exists (select * from Y where A.X = Y.X)
and exists (select * from Y where A.XX = Y.X)
Wenn Y X-Werte von 1,2,3,4,5
enthält , und x.x = 2
und x.xx = 4
, sie existieren beide (auf verschiedenen Datensätzen in Y) und der Datensatz von myTable sollte in der Ausgabe angezeigt werden.
EDIT:Diese Antwort zuvor gab an, dass You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. Wie Martin darauf hingewiesen hat, ist dies nicht wahr (sicherlich nicht für SQL Server 2005 und höher). Siehe Links
- http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/