Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL - junção esquerda com operador OR (MySQL)


EDITAR

Não tenho certeza do que você precisa
  • você pode mostrar algum resultado esperado
  • você pode nos dizer o que você quer dizer com "mata, em termos de desempenho" (ele vai para 20 segundos de tempo de execução?)

Não acredito que seja mais eficiente, mas experimente.
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)

Você tem que gerenciar o resultado no SELECT com CASE WHEN ...

Você pode comparar o desempenho e colocar índices nas colunas apropriadas (depende do que você tem na tabela completa e na consulta, mas aqui deve ser id, id1 and col2 )