Могу ли я посоветовать мне, как реализовать этот запрос, который требует первых ссылок на таблицы, которые имеют отношение "один к одному", а затем необходимо связать отношения "многие-ко-многим", я разделяю пример структуры таблиц:
table1
id
name
date
table2
id
table1_id
country
table3
id
first_name
last_name
table4
id
table3_id
type
city
table1_table3
id
table1_id
table3_id
table5
id
somefield
table1_table5
id
table1_id
table5_id
Теперь я пробую этот запрос, но я не знаю, как я должен реализовать связь "многие-ко-многим"
select
table1.id id,
table3.first_name first_name,
table3.last_name last_name,
table4.type type,
table4.city city,
table2.country country,
table5.somefield somefield
from
table1 table1
inner join
table2 table2 on table1.id = table2.table1_id
inner join
table3 table3
inner join
table4 table4 on table4.table3_id = table3.id
inner join
table5 table5
where
table1.date > '2018-05-04'
заранее большое спасибо
Просто используйте обычные отношения соединения:
select
t1.id id,
t3.first_name first_name,
t3.last_name last_name,
t4.type type,
t4.city city,
t2.country country,
t5.somefield somefield
from table1 t1
join table2 t2 on t1.id = t2.table1_id
join table1_table3 t13 on t13.table1_id = t1.id
join table3 t3 on t3.id = t13.table3_id
join table4 t4 on t4.table3_id = t3.id
join table1_table5 t15 on t15.table1_id = t1.id
join table5 t5 on t5.id = t15.table5_id
where
t1.date > '2018-05-04'
Также:
Я улучшил читаемость, используя более короткие псевдонимы, такие как t1
.
Я заменил inner join
, просто join
поскольку inner
является избыточным. Вы можете добавить обратно, если хотите.
не уверен, что это table1_table5
для вас, но таблица table1_table5
должна, вероятно, быть объединена с положением, подобным этому
join table1_table5
on table1_table5.table1_id = table1.id
и ниже, что таблица table5
должна быть соединена как это
join table5 table5
on table1_table5.table5_id = table5.id
btw: вы можете использовать and
для нескольких условий в on-clause