Как написать правильные запросы с использованием JOIN в Multi-tenant базе данных?

Для того что бы разграничить данные, в SaaS проекте, у каждой таблицы есть поле company_id. База данных используется MySQL. При запросах к одной таблице проблем явно не возникает, но при запросах к нескольким таблицам приходится повторять фильтр значения company_id для каждой таблицы.

Как привильно сделать запрос с множеством JOIN?

Пример SQL который хотелось бы оптимизировать:
SELECT * FROM table0 
LEFT JOIN table1 ON table0.val1 = table1.val1
LEFT JOIN table2 ON table0.val2 = table2.vav2
LEFT JOIN table3 ON table0.val3 = table3.val3
LEFT JOIN table4 ON table0.val4 = table4.val4
WHERE
table0.company_id = $company_id AND
table1.company_id = $company_id AND
table2.company_id = $company_id AND
table3.company_id = $company_id AND
table4.company_id = $company_id


Не уверен в правильности, подобного подхода, надеюсь есть более правильное решение, которое хотелось бы узнать.
  • Вопрос задан
  • 2562 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Cage
Возможно стоит условия из WHERE убрать в ON
SELECT * FROM table0 
LEFT JOIN table1 ON table0.val1 = table1.val1 AND table1.company_id = $company_id
LEFT JOIN table2 ON table0.val2 = table2.vav2 AND table2.company_id = $company_id 
LEFT JOIN table3 ON table0.val3 = table3.val3 AND table3.company_id = $company_id
LEFT JOIN table4 ON table0.val4 = table4.val4 AND table4.company_id = $company_id
WHERE 
  table0.company_id = $company_id

Такой запрос будет работать несколько быстрее за счет того что не будут джоинится лишние строки не попадающие под условия
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы