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

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

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 ]

0 голосов
/ 25 мая 2018

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

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

0 голосов
/ 25 мая 2018

не уверен, что это работает для вас, но таблицу table1_table5, вероятно, следует объединить с таким предложением, как это

join table1_table5
on table1_table5.table1_id = table1.id

, а ниже этой таблицы table5 должно быть возможно объединено следующим образом

join table5 table5
on table1_table5.table5_id = table5.id

кстати: вы можете использовать and для нескольких условий в предложении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...