Właściwie nie, nie ma mądrzejszego sposobu na napisanie tego (bez dwukrotnego odwiedzania Y), biorąc pod uwagę, że X, do którego pasuje myTable.X i myTable.YY, może nie pochodzić z tego samego wiersza.
Alternatywnie, forma zapytania EXISTS to
select *
from myTable A
where exists (select * from Y where A.X = Y.X)
and exists (select * from Y where A.XX = Y.X)
Jeśli Y zawiera X wartości 1,2,3,4,5
i x.x = 2
i x.xx = 4
, oba istnieją (w różnych rekordach w Y), a rekord z myTable powinien być pokazany w danych wyjściowych.
EDYTUJ:Ta odpowiedź wcześniej stwierdził, że You could rewrite this using _EXISTS_ clauses which will work faster than _IN_
. Jak zauważył Martin, nie jest to prawdą (z pewnością nie w przypadku SQL Server 2005 i nowszych wersji). Zobacz linki
- http://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- http://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/