@sashx

Как написать запрос для трёх связанных таблиц (many-to-many)?

Здравствуйте! У меня есть две таблицы, между которыми связь many - to - many (main_table, table_2). Между ними есть промежуточная таблица (table_1). Как достать данные из таблицы main_table, в которых есть необходимое значение в table_2?

Привожу структуру таблиц:

main_table:

-id: not null,
-column1,
-column2,
-column3
-------------

table_1:
-id: not null,
-main_table_id: not null,
-column1,
-column2,
-column3
-------------

table_2:
-id: not null,
-table_1_id: not null,
-necessary_column: not null, string
-------------


Соответственно, необходимо достать данные из main_table, в которых есть некоторое установленное значение из table_2 (можно, например, взять value)
  • Вопрос задан
  • 220 просмотров
Пригласить эксперта
Ответы на вопрос 1
@chemdev
Формально, если не ошибаюсь, тут нет м2м связи. Есть о2м main => t1 и o2m t1 => t2
Нужно сделать два лефт джойна и взять уникальные столбцы из таблицы main
Условие фильтрации можно написать сразу же во втором джоине а можно и в конструкции where.

SELECT DISTINCT "m"."id" FROM "main_table" AS "m"
    LEFT JOIN "table_1" AS "t1" ON "t1"."main_table_id" = "m"."id"
    LEFT JOIN "table_2" AS "t2" ON "t2"."table_1_id" = "t1"."id"
    AND "t2"."nexessary_column" = 'you string to filter'
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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