MySql - выбрать из основной таблицы с большим количеством связанных таблиц
У меня есть главная таблица, которая связана с 10 другими таблицами через отношения один ко многим.
Например:
main Table table1 table2
---------- ------- -------
id * id* id*
name mainTableId ** mainTableId **
column1 column2
Я пытался:
SELECT *
FROM main_table
LEFT OUTER JOIN table1 On table1.mainTableId = main_table.id
LEFT OUTER JOIN table2 On table2.mainTableId = main_table.id
...
Проблема в том, что я получаю много результатов обратно, так как каждый результат в main_table
умножается на все результаты в table1
, table2
, так далее.
Я хотел бы использовать только один SELECT
запрос, так как запрос базы данных 10 раз занимает много времени.
Получение 100 результатов из каждой таблицы достаточно для моих нужд, но попытка сделать следующее привела к ошибке, которая limit is not supported with a sub query
:
LEFT OUTER JOIN table1 WHERE id in (
SELECT id FROM table1 WHERE mainTableId = mainTable.id LIMIT 100
)
Я использую AWS Aurora. Как я могу улучшить этот запрос?
1 ответ
SELECT *
FROM main_table
LEFT OUTER JOIN table1 ON main_table.id = table1.mainTableId
LEFT OUTER JOIN table2 ON main_table.id = table2.mainTableId
...
По второму вопросу вы можете просто получить 100 строк из других таблиц и присоединиться к ним!
SELECT *
FROM main_table
LEFT OUTER JOIN (SELECT * FROM table1 LIMIT 100)a ON main_table.id = a.mainTableId
LEFT OUTER JOIN (SELECT * FROM table2 LIMIT 100)b ON main_table.id = b.mainTableId
...