Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL - Linksverknüpfung mit ODER-Operator (MySQL)

BEARBEITEN

Nicht wirklich sicher, was Sie brauchen

  • können Sie ein erwartetes Ergebnis zeigen
  • können Sie uns sagen, was Sie mit "tötet es in Bezug auf die Leistung" meinen (reicht es auf 20 Sekunden Ausführungszeit?)

Ich glaube nicht, dass es effizienter ist, aber versuchen Sie es.

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)

Das Ergebnis müssen Sie im SELECT verwalten mit CASE WHEN ...

Sie können die Leistung vergleichen und Indizes auf geeignete Spalten setzen (hängt davon ab, was Sie in der vollständigen Tabelle und Abfrage haben, aber hier sollte es id, id1 and col2 sein )