Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Abfrage, bei der sich zwei Spalten im Ergebnis einer verschachtelten Abfrage befinden

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