BEWERKEN
Niet echt zeker wat je nodig hebt
- kun je een verwacht resultaat laten zien
- Kun je ons vertellen wat je bedoelt met "het doodt, in termen van prestaties" (gaat het tot 20 seconden uitvoeringstijd?)
Ik geloof niet dat het efficiënter is, maar probeer het.
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)
U moet het resultaat beheren in de SELECT
met CASE WHEN
...
U kunt de prestaties vergelijken en indexen op toegewezen kolommen plaatsen (afhankelijk van wat u in de volledige tabel en query hebt, maar hier zou het id, id1 and col2
moeten zijn )