如何实现一个sql查询,需要一对一的连接,然后多对多?

时间:2018-05-25 17:39:32

标签: mysql sql

请告诉我如何实现此查询,该查询需要首先链接具有一对一关系的表,然后需要以多对多关系链接,我分享了一个结构示例表:

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 :(得分:2)

不确定这是否适合你,但是表table1_table5应该加上像这样的on-clause

join table1_table5
on table1_table5.table1_id = table1.id

以及该表table5下面应该像这样加入

join table5 table5
on table1_table5.table5_id = table5.id

btw:你可以在on-clause

中使用and来表示多个条件

答案 1 :(得分: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是多余的。如果您愿意,可以添加回来。