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
- https://explainextended.com/2009 /06/16/in-vs-join-vs-exists/
- https://sqlinthewild.co .za/index.php/2009/08/17/exists-vs-in/