sql >> Database >  >> RDS >> Mysql

SQL - linker join met OR-operator (MySQL)

BEWERKEN

Niet echt zeker wat je nodig hebt

  • kun je een verwacht resultaat laten zien
  • Kun je ons vertellen wat je bedoelt met "het doodt, in termen van prestaties" (gaat het tot 20 seconden uitvoeringstijd?)

Ik geloof niet dat het efficiënter is, maar probeer het.

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)

U moet het resultaat beheren in de SELECT met CASE WHEN ...

U kunt de prestaties vergelijken en indexen op toegewezen kolommen plaatsen (afhankelijk van wat u in de volledige tabel en query hebt, maar hier zou het id, id1 and col2 moeten zijn )



  1. PHP MySQL geeft alleen lege tabel weer

  2. Postgres selecteer alle kolommen maar groepeer op één kolom

  3. MySql logische volgorde op

  4. MySQL-externe sleutels op zichzelf