SQL 内连接到同一个表,在多个列上,多次

Posted

技术标签:

【中文标题】SQL 内连接到同一个表,在多个列上,多次【英文标题】:SQL inner join to the same table, on multiple columns, multiple times 【发布时间】:2016-08-22 11:22:37 【问题描述】:

我有一个表来保存 sql 视图的关系

**ID**  VIEW1 VIEW2 COLUMN          RELATIONSHIP
**1**   1     2     SalesOrderID    INNER JOIN
**5**   1     3     SalesOrderID    INNER JOIN
**6**   2     4     ProductID       INNER JOIN

要建立视图 4 和 3 之间的关系,我必须使用 ID 1 行作为中间引用,在 MSSQL 中是否有可行的方法可以完成此任务

【问题讨论】:

你有没有尝试过? 或者有没有办法在mssql视图之间建立关系 关系数据库应具有静态架构(表、列、关系)。因此,要根据存储在表中的规则生成查询,您必须使用动态 SQL - 以编程方式构建查询文本并使用 sp_executesqlEXEC 运行它。 【参考方案1】:

我怀疑你需要这样的东西:

select v3.*, v4.*
from View1 as v1
    inner join View2 as v2 on v2.SalesOrderID = v1.SalesOrderID
    inner join View3 as v3 on v3.SalesOrderID = v1.SalesOrderID
    inner join View4 as v4 on v4.ProductID = v2.ProductID

-或(仅适用于内部连接)-

select v3.*, v4.*
from View1 as v1
    ,View2 as v2 
    ,View3 as v3
    ,View4 as v4
where
    v2.SalesOrderID = v1.SalesOrderID
    and v3.SalesOrderID = v1.SalesOrderID
    and v4.ProductID = v2.ProductID

正如 Vladimir Baranov 在上面的评论中所建议的那样 - 如果您需要以编程方式构建此选择(即您在 表中的数据以保存 sql 视图的关系随着时间的推移而变化),您将不得不处理使用动态 SQL。

【讨论】:

以上是关于SQL 内连接到同一个表,在多个列上,多次的主要内容,如果未能解决你的问题,请参考以下文章

SQL中有几种连接?有啥区别?(左连右连内连和外连?)

从 Docker 容器内连接到 SQL Server Express 会导致评估密码时出错

MySql表的内连和外连

基于另一列的最大值的列上的 SQL 内连接 [重复]

MySQL 表的内连和外连

在EF中的多个列上连接多个表