Как реализовать SQL-запрос, который требует соединения один к одному, а затем много ко многим?

0

Могу ли я посоветовать мне, как реализовать этот запрос, который требует первых ссылок на таблицы, которые имеют отношение "один к одному", а затем необходимо связать отношения "многие-ко-многим", я разделяю пример структуры таблиц:

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'

заранее большое спасибо

Теги:

2 ответа

1
Лучший ответ

Просто используйте обычные отношения соединения:

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 является избыточным. Вы можете добавить обратно, если хотите.

2

не уверен, что это 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню