Pertama, tidak perlu distinct . Query dapat ditulis sebagai:
select *
from example@sqldat.com
where column1 in (
select column2
from example@sqldat.com
where column3 > 0
)
order by column1
Kedua, ada (setidaknya) dua cara lagi untuk menulisnya. Baik dengan JOIN :
select t1.*
from example@sqldat.com t1
join example@sqldat.com t2
where t2.column2 = t1.column1
and t2.column3 > 0
group by
t1.id, t1.column1, ...
order by t1.column1
atau (preferensi saya) dengan EXISTS :
select t1.*
from example@sqldat.com t1
where exists
( select *
from example@sqldat.com
where t2.column2 = t1.column1
and t2.column3 > 0
)
order by column1
Bagaimanapun, Anda harus memeriksa rencana eksekusi untuk semuanya.
Saya berharap kinerja menjadi yang terbaik jika Anda memiliki indeks di table1.column1 dan untuk table2 , baik indeks pada column2 atau indeks komposit pada (column3, column2)