CHỈNH SỬA
Không thực sự chắc chắn bạn cần gì
- bạn có thể hiển thị một số kết quả mong đợi không
- bạn có thể cho chúng tôi biết ý của bạn khi "giết nó, về mặt hiệu suất" (thời gian thực thi có kéo dài đến 20 giây không?)
Tôi không tin rằng nó hiệu quả hơn nhưng hãy thử nó.
select
*
from
tableA as a
left join tableB as b1
on a.id=b1.id1
and b1.col2='Red'
left join tableB as b2
on a.id=b2.id2
and b2.col2='Blue'
where
(b1.id1 is not null or b2.id2 is not null)
or (b1.id1 is null and b2.id2 is null)
Bạn phải quản lý kết quả trong SELECT
với CASE WHEN
...
Bạn có thể so sánh hiệu suất và đặt các chỉ mục trên các cột thích hợp (tùy thuộc vào những gì bạn có trong bảng và truy vấn đầy đủ nhưng ở đây nó phải là id, id1 and col2
)