Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL - ляво съединение с оператор OR (MySQL)

РЕДАКТИРАНЕ

Не съм много сигурен от какво се нуждаете

  • можете ли да покажете някакъв очакван резултат
  • можете ли да ни кажете какво имате предвид под „убива го по отношение на производителността“ (стига ли до 20 секунди време за изпълнение?)

Не вярвам, че е по-ефективно, но опитайте.

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)

Трябва да управлявате резултата в SELECT с CASE WHEN ...

Можете да сравните ефективността и да поставите индекси в съответните колони (зависи от това какво имате в пълната таблица и заявка, но тук трябва да е id, id1 and col2 )



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Първо подреждане по конкретна стойност на полето

  2. регистрирайте актуализации на mysql

  3. Неправилна десетична (целочислена) стойност:' ' mySQL

  4. MySQL INSERT SELECT - Дублиращи се редове

  5. Oracle:Параметризирана заявка с клауза IN връща нулева стойност