MySql - выбрать из основной таблицы с большим количеством связанных таблиц - PullRequest
0 голосов
/ 15 мая 2018

У меня есть главная таблица, которая связана с 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 и т. Д.

Iхотел бы использовать только один 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 Ответ

0 голосов
/ 15 мая 2018
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
...
...