SQL 多连接多对多

Posted

技术标签:

【中文标题】SQL 多连接多对多【英文标题】:SQL many joins many to many 【发布时间】:2020-08-25 09:07:58 【问题描述】:

我有 5 张桌子:

表格报告

Report_Id | Report_name
-----------------
      1     | Income
      2     | Outcomes
      3     | Costs

多对多表 ReportsIpRel

Ip_Id | Report_Id
-----------------
    6   |    1
    4   |    2
    5   |    2
    2   |    2
    1   |    3

信息提供者表

Ip_Id | Ip_Name
-----------------
    6   |    Comission
    4   |    Comapny
    5   |    Others
    2   |    People
    1   |    Traveler

多对多表 QueriesIpRel

Ip_Id | Query_Id
-----------------
    6   |    3
    4   |    3
    5   |    3
    2   |    5
    1   |    1

查询表

Query_Id | Query_Name
-----------------
    1   |    connection
    2   |    distantcon
    3   |    shortconn
    4   |    linking
    5   |    grounding

我想要实现的 SELECT 如下:

Report_Id | Report_name | Ip_Id | Ip_Name | Query_Id | Query_Name
    2     | Outcomes    |  4    | Comapny |  3       | shortconn
    2     | Outcomes    |  5    | Others  |  3       | shortconn
    2     | Outcomes    |  2    | People  |  5       | grounding

我尝试了很多这样的左/内连接:

left outer join ReportsIPRel rir on r.Report_Id = rir.Report_Id
left outer join InfoProvider ipr on rir.Ip_Id = ipr.Ip_Id
left outer join QueriesIPRel qir on ipr.Ip_Id = qir.Ip_Id 
left outer join Queries q on qir.Query_Id = q.Query_Id
where r.Report_Id= '2'

但一切都是徒劳的。

我必须使用 where 条件:WHERE report_Id = '2' /EXAMPLE

我正在尝试在 SQL Server Management Studio 的 ms SQL 中执行此操作。

提前谢谢你

【问题讨论】:

SQL Server Management Studio 通常与 MS SQL Server 一起使用。你确定你使用的是 mysql 吗? 好的,我添加了连接 为 CREATE TABLE + INSERT INTO 脚本提供示例数据,而不是(或除了)表。或者创建在线小提琴。 【参考方案1】:

请尝试这个查询它在 SQL 服务器中对我有用:

Demo

select r.*, ipr.ip_id, ipr.Ip_Name, q.uery_Id, q.Query_Name from
reports r
left outer join ReportsIPRel rir on r.Report_Id = rir.Report_Id
left outer join InfoProviders ipr on rir.Ip_Id = ipr.Ip_Id
left outer join QueriesIPRel qir on ipr.Ip_Id = qir.Ip_Id 
left outer join Queries q on qir.Query_Id = q.uery_Id
where r.Report_Id= '2'

【讨论】:

以上是关于SQL 多连接多对多的主要内容,如果未能解决你的问题,请参考以下文章

存在匹配时排除不匹配行的 SQL 多对多连接

多对多注释未在选择查询中生成连接

Hibernate映射( 多对一对一对多多对多)的配置方法

mysql 多对多映射关系的筛选SQL怎么写

总结一下数据库的 一对多多对一对多对多 关系

多对多连接