BEARBEITEN
Nicht wirklich sicher, was Sie brauchen
- können Sie ein erwartetes Ergebnis zeigen
- können Sie uns sagen, was Sie mit "tötet es in Bezug auf die Leistung" meinen (reicht es auf 20 Sekunden Ausführungszeit?)
Ich glaube nicht, dass es effizienter ist, aber versuchen Sie es.
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)
Das Ergebnis müssen Sie im SELECT
verwalten mit CASE WHEN
...
Sie können die Leistung vergleichen und Indizes auf geeignete Spalten setzen (hängt davon ab, was Sie in der vollständigen Tabelle und Abfrage haben, aber hier sollte es id, id1 and col2
sein )