EDYTUJ
Nie jestem pewien, czego potrzebujesz
- czy możesz pokazać jakiś oczekiwany wynik
- Czy możesz nam powiedzieć, co masz na myśli przez „zabija to, pod względem wydajności” (czy trwa to 20 sekund czasu wykonania?)
Nie wierzę, że jest bardziej wydajny, ale spróbuj.
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)
Musisz zarządzać wynikiem w SELECT
z CASE WHEN
...
Możesz porównać wydajność i umieścić indeksy na odpowiednich kolumnach (w zależności od tego, co masz w pełnej tabeli i zapytaniu, ale tutaj powinno być id, id1 and col2
)