Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL - jointure gauche avec opérateur OR (MySQL)

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 )