Đầu tiên, không cần distinct . Truy vấn có thể được viết là:
select *
from example@sqldat.com
where column1 in (
select column2
from example@sqldat.com
where column3 > 0
)
order by column1
Thứ hai, có (ít nhất) hai cách nữa để viết nó. Hoặc với 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
hoặc (tùy chọn của tôi) với 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
Trong mọi trường hợp, bạn nên kiểm tra các kế hoạch thực hiện cho tất cả chúng.
Tôi mong đợi hiệu suất sẽ tốt nhất nếu bạn có chỉ mục trên table1.column1 và cho table2 , hoặc là một chỉ mục trên column2 hoặc chỉ mục tổng hợp trên (column3, column2)