Đầu tiên, không cần distinct
. Truy vấn có thể được viết là:
select *
from [email protected]
where column1 in (
select column2
from [email protected]
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 [email protected] t1
join [email protected] 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 [email protected] t1
where exists
( select *
from [email protected]
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)