在 SQL 中只计算一次连接的数据

Posted

技术标签:

【中文标题】在 SQL 中只计算一次连接的数据【英文标题】:Compute data for join only once in SQL 【发布时间】:2020-11-25 16:14:29 【问题描述】:

我正在编写一个包含许多连接的大型查询。在查询的中途,结果行看起来有点像这样:

| x1 | y1 | z1 | | x2 | y2 | z2 | | x3 | y3 | z3 | | x4 | y4 | z1 |

我继续将其他表连接到这组行,但连接依赖于 z 列(如果 z 值为完全相同的)。由于 z 列中有重复项(如 z1),我不希望重复这项工作。是否可以计算数据只加入一次?

我当前的 SQL 查询看起来像这样,假设 t1 代表上面的行:

select *
from
t1
join t2 on t2.propertyA = t1.z
join t3 on t3.propertyB = t2.propertyB
...

如果我可以在单个 SQL 查询中执行此操作,那将是理想的。由于当前的重复工作,我正在运行的查询性能不够。嵌套查询没问题。

【问题讨论】:

那么 z1 的 2 行中的哪一行将连接到其他表,为什么? 请提供样本数据和期望的结果。 【参考方案1】:

可以任意选择一个z行进行join;

select *
from (select t1.*,
             row_number() over (partition by z order by x) as seqnum
      from t1
     ) t1
     t2
     on t2.propertyA = t1.z and t1.seqnum = 1 . . .

【讨论】:

以上是关于在 SQL 中只计算一次连接的数据的主要内容,如果未能解决你的问题,请参考以下文章

php设计模式

sql多属性连接

记一次sqlserver连接Oracle

一次查询中的 Odbc 和 Sql 连接

使用云 sql 作为数据库连接网站计算引擎 VM

sqlserver中游标循环中只更新当前行的方法