REDIGER
Ikke helt sikker på, hvad du har brug for
- kan du vise nogle forventede resultater
- kan du fortælle os, hvad du mener med "dræber det, hvad angår ydeevne" (går det til 20 sekunders eksekveringstid?)
Jeg tror ikke, det er mere effektivt, men prøv det.
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)
Du skal administrere resultatet i SELECT
med CASE WHEN
...
Du kan sammenligne ydeevnen og sætte indekser på passende kolonner (afhænger af, hvad du har i den fulde tabel og forespørgsel, men her skal det være id, id1 and col2
)