Mysql
 sql >> Database >  >> RDS >> Mysql

SQL - join sinistro con operatore OR (MySQL)

MODIFICA

Non sono proprio sicuro di cosa ti serve

  • puoi mostrare qualche risultato atteso
  • Puoi dirci cosa intendi con "lo uccide, in termini di prestazioni" (va a 20 secondi di tempo di esecuzione?)

Non credo sia più efficiente, ma provalo.

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)

Devi gestire il risultato nel SELECT con CASE WHEN ...

Puoi confrontare le prestazioni e inserire gli indici nelle colonne appropriate (dipende da cosa hai nella tabella e nella query complete, ma qui dovrebbe essere id, id1 and col2 )