sql >> Base de Datos >  >> RDS >> Mysql

SQL:combinación izquierda con operador OR (MySQL)

EDITAR

No estoy muy seguro de lo que necesitas

  • puede mostrar algún resultado esperado
  • ¿Puedes decirnos qué quieres decir con "lo mata, en términos de rendimiento" (¿llega a 20 segundos de tiempo de ejecución?)

No creo que sea más eficiente, pero pruébalo.

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)

Tienes que gestionar el resultado en el SELECT con CASE WHEN ...

Puede comparar el rendimiento y colocar índices en las columnas apropiadas (depende de lo que tenga en la tabla completa y la consulta, pero aquí debería ser id, id1 and col2 )