在 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 中只计算一次连接的数据的主要内容,如果未能解决你的问题,请参考以下文章