Как написать запрос для трёх связанных таблиц (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)
Ответы (1 шт):
А в чем именно проблема?
В данном случае хватит обычного запроса из нескольких таблиц. Главное условия "связи" таблиц не забыть и правильно их указать.
Как-то так может быть
SELECT main_table.column1
FROM main_table, table_1, table_2
WHERE main_table.id = table_1.main_table_id AND table_1.id = table_2.table_1_id
AND table_2.necessary_column = 'value'
Т.е. делаем выборку поля column1 из таблицы main_table. В FROM указываем все таблицы, которые участвуют в запросе. Дальше в WHERE не забываем указать условия по которым таблицы связаны друг с другом. И так же указываем условие для поля из table_2, по котором нужно сделать выборку.