sql - 从两个不同的 JSON 列中选择导致 n^2 行而不是 n
问题描述
我有一个这样的 JSON 文档:
{"cases":[1983,2188, etc.],"deaths":[78,84, etc.]});
我正在尝试使用以下方法并排查看它们:
SELECT dd::numeric AS deaths, cc::numeric AS cases
FROM covid_json, json_array_elements_text(info->'deaths') dd, json_array_elements_text(info->'cases') cc
cases
并且deaths
两者的长度都是 51,但上面的查询给出了 2601 (51^2) 行,例如:
我应该怎么做才能防止这些值在每一行中重复?
解决方案
一种选择是取消嵌套with ordinality
。这会为每个元素添加一个索引号,然后您可以使用它join
:
select d.deaths, c.cases
from covid_json cj
cross join lateral json_array_elements(cj.info -> 'cases') with ordinality as d(deaths, rn)
inner join lateral json_array_elements(cj.info -> 'deaths') with ordinality as c(cases, rn)
on c.rn = d.rn
这假设两个数组具有相同数量的元素,如您的问题中所述。
样本数据:
| 信息 | | :------------------------------------------------ - | | {“案例”:[1983, 2188, 2615],“死亡”:[78,84, 87]} |
结果:
死亡 | 案例 :----- | :---- 1983 | 78 第2188章 84 2615 | 87
推荐阅读
- c# - 根据当前 CultureInfo ASP.NET Core 存储 DateTime
- powershell - 选择 x 数量的文件并将它们复制到另一个文件夹的批处理文件
- ios - 子视图关闭后父视图不刷新
- java - 需要从 List 中的每个文件中读取每 N 行
- vue.js - 创建一个新的 vue-moveable 实例
- python - 如何始终在 Python 中导入一组模块
- swift - 虽然当前导航然后显示视图控制器栏按钮不来,为什么在 swift
- javascript - 在我的表单按钮上调用 submit() 和 reload() 不起作用
- minecraft - 当我尝试构建我的 jar 文件(java)时,获取包 org.bukkit 不存在
- php - 在php中使用通配符更改多维数组值?