MODIFIER
Je ne sais pas vraiment de quoi avez-vous besoin
- pouvez-vous montrer un résultat attendu
- pouvez-vous nous dire ce que vous entendez par "le tue, en termes de performances" (est-ce que ça va jusqu'à 20 secondes de temps d'exécution ?)
Je ne crois pas que ce soit plus efficace mais essayez-le.
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)
Il faut gérer le résultat dans le SELECT
avec CASE WHEN
...
Vous pouvez comparer les performances et placer des index sur les colonnes appropriées (cela dépend de ce que vous avez dans la table complète et la requête, mais ici, il devrait s'agir de id, id1 and col2
)