実際にはいいえ、myTable.X と myTable.YY が一致する X が同じ行のものではない可能性があることを考えると、これを (Y を 2 回訪問することなく) よりスマートに記述する方法はありません。
別の方法として、クエリの 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)
Y が 1,2,3,4,5
の X 値を含む場合 、および x.x = 2
および x.xx = 4
、それらは両方とも (Y の異なるレコードに) 存在し、myTable からのレコードが出力に表示されます。
編集:以前のこの回答 You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. AS Martin が指摘したように、これは正しくありません (SQL Server 2005 以降には当てはまりません)。リンクを見る
- http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/