PostgreSQL 使用空数组解除嵌套

2024-02-06

我使用 postgreSQL 9.1。在我的数据库中有一个表,看起来像

id | ... | values
-----------------------
1  | ... | {1,2,3}
2  | ... | {}

其中 id 是整数,values 是整数数组。数组可以为空。

我需要取消这个列表的嵌套。如果我查询

select id, ..., unnest(values)
from table

我得到 id = 1 的三行(如预期),没有 id = 2 的行。有没有办法得到像这样的结果

id  | ... | unnest
-------------------
1   | ... | 1
1   | ... | 2
1   | ... | 3
2   | ... | null

即还包含具有空数组的行的查询?


select id, 
       case 
         when int_values is null or array_length(int_values,1) is null then null
         else unnest(int_values)
       end as value
from the_table;

(请注意,我将该列重命名为values to int_values as values是保留字,不应用作列名)。

SQLFiddle:http://sqlfiddle.com/#!1/a0bb4/1 http://sqlfiddle.com/#!1/a0bb4/1


Postgres 10 不允许使用unnest()不再这样了。

您需要使用横向连接:

select id, t.i
from the_table
   cross join lateral unnest(coalesce(nullif(int_values,'{}'),array[null::int])) as t(i);

网上例子:http://rextester.com/ALNX23313 http://rextester.com/ALNX23313


当使用左连接而不是交叉连接时,它可以进一步简化:

select id, t.i
from the_table
 left join lateral unnest(int_values) as t(i) on true;

网上例子:http://rextester.com/VBO52351 http://rextester.com/VBO52351

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL 使用空数组解除嵌套 的相关文章

  • SQL 更新数据集中的位置

    id1 id2 bool 1 1 F 1 2 F 2 1 F UPDATE table name SET bool T WHERE id1 id2 IN 1 1 2 1 Need work here 所以基本上我想选择条件为 id1 id2
  • 为什么byteArray的长度是22而不是20?

    我们尝试从字符串转换为Byte 使用以下 Java 代码 String source 0123456789 byte byteArray source getBytes UTF 16 我们得到一个长度为 22 字节的字节数组 我们不确定这个
  • 如何为 MySQL 和 Postgres 编写不区分大小写的查询?

    我在本地运行 MySQL 数据库进行开发 但部署到使用 Postgres 的 Heroku Heroku 处理几乎所有事情 但我不区分大小写的 Like 语句变得区分大小写 我可以使用 iLike 语句 但我的本地 MySQL 数据库无法处
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • for 循环内的 Promise 的 setTimeout

    我想做的是这样的 循环数据集合 对于每个数据元素调用 API 等待 Promise 失败或解析 暂停 30 秒 然后对下一个数据元素再次执行此操作 直到没有任何内容可以迭代集合 最后显示 完成 消息 到目前为止 这是我编写的代码 在其他问题
  • 如何显示多维数组第二层的 json 值?

    解决此代码时遇到问题 这些是数组 Array 0 gt stdClass Object id gt 1 name gt delux price gt 213 description gt tv gt 0 breakfast gt 0 par
  • Numpy:生成二维高斯 pdf 总和作为数组

    我正在尝试生成一个 600 x 600 numpy 数组 其中包含 10 个类似高斯数组的总和 每个数组都有一个随机生成的中心 我尝试使用高斯滤波器来生成各个类似高斯的数组 然后将它们相加 但我确信有一种矢量化的方法可以解决这个问题 即使n
  • 基于列顺序的查询速度

    数据库中列类型的顺序对查询时间有影响吗 例如 具有混合排序 INT TEXT VARCHAR INT TEXT 的表的查询速度是否会比具有连续类型 INT INT VARCHAR TEXT TEXT 的表慢 答案是肯定的 这确实很重要 而且
  • 删除 NSMutablearray 中的最后一个对象[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 为什么要删
  • 是否保证 sizeof(T[N]) == N * sizeof(T) ?

    我一直假设 N 个元素类型的数组的大小T 由返回sizeof保证正好是N次sizeof T The 对这个问题的评论 https stackoverflow com questions 46457449 is it always the c
  • 选择MySql表数据放入数组中

    我尝试从 mysql 捕获数据并将它们全部放入数组中 认为 users table id name code 1 gorge 2132 2 flix ksd02 3 jasmen skaod2 sql mysql query select
  • 过滤数组以获取唯一字段值

    我知道有很多方法可以过滤数组中的唯一值 但是如何过滤数组中具有给定字段的唯一值的对象呢 例如我有 obj1 obj2 obj3 其中每个对象具有以下形式 firstName lastName 如何过滤数组以最终得到一个最终数组 其中所有对象
  • Postgres、更新和锁定顺序

    我正在研究 Postgres 9 2 有 2 个更新 每个更新都有自己的事务 一个看起来像 UPDATE foo SET a 1 WHERE b IN 1 2 3 4 另一个也类似 UPDATE foo SET a 2 WHERE b IN
  • DBeaver PostgreSQL 数据库 - 此驱动程序不支持 SCRAM 身份验证

    我正在尝试将 PostgreSQL 数据库添加到 DBeaver 但当我尝试连接到数据库时收到以下错误 我正在使用 DBeaver 版本 7 2 3 202010191702 收到此消息后 我安装了最新版本的 JDK 11 0 9 和 pg
  • 即使将“enable_seqscan”设置为关闭后,也未使用数组列上的 GIN 索引?

    根据推荐this https stackoverflow com questions 4058731 can postgresql index array columns comment10357041 4059785评论 我建立了一个 i
  • 在 Numpy 中切片后确定结果数组的形状

    我很难理解在 numpy 中切片后如何确定结果数组的形状 例如 我使用以下简单代码 import numpy as np array np arange 27 reshape 3 3 3 slice1 array 1 2 1 slice2
  • Postgresql插入触发器设置值

    假设在 Postgresql 中 我有一个表T它的一栏是C1 我想在新记录添加到表中时触发一个函数T 该函数应该检查列的值C1在新记录中 如果它为 null 空 则将其值设置为 X 这可能吗 您需要触发器是正确的 因为为列设置默认值对您不起
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 在 Javascript 中创建数组

    我对 javascript 不太熟悉 并且在用 javascript 制作 2d 或者也许我可能需要 3d 数组时遇到了一些麻烦 我目前需要收集 2 条信息 一个 ID 和一个值 因此我创建了以下内容 var myArray var id

随机推荐

  • 将 .net 方法公开为 Excel 函数?

    我有一组计算方法位于 Net DLL 中 我想让 Excel 2003 用户可以使用这些方法 以便他们可以在电子表格中使用它们 例如我的 net方法 public double CalculateSomethingReallyComplex
  • 查找二进制中类符号的来源

    我有一个有趣的问题 我收到的崩溃日志引用了我的应用程序中名为 NRURLProtocol 的类 特别是在文件 NRURLProtocol m 中 根据崩溃日志 该日志存在于我的应用程序中 而不是存在于 iOS 框架中 但是 我的项目中没有
  • VSCODE 笔记本 - 是否可以仅显示大纲中的 Markdown 标题?

    我使用 Markdown 标题在笔记本中导航 但我也倾向于制作大量 非标题 Markdown 笔记 两者都出现在大纲中 随着笔记本变大 找到正确的标题变得相当困难 有没有办法抑制大纲中显示的普通降价单元格 我关注了 github 和 at
  • 如何将与字段关联的对象列表检索到实体类中?

    当我通过任何字段找到客户时 一切都很顺利 我得到了带有返回的全局对象的 JSON 我正在编写代码来查找Customer由于他们lastName 客户实体有一个对象 其中的字段lastName被宣布 因此 我希望我的端点像第一种情况一样返回客
  • 从 .NET 中的堆栈帧获取参数值?

    我希望能够从 NET中的堆栈帧中获取所有参数值 有点像在 Visual Studio 调试器中查看调用堆栈中的值的方式 我的方法集中于使用堆栈框架类 http msdn microsoft com en us library system
  • 从 iPad (目标 C) 到 MVP Web API (C#) 的时区映射

    我有一个 Web 服务 MVC Web API 我在其中存储 UTC 格式的日期时间值 iPad 与 API 进行通信 并将传递标头中的时区设置 API 会根据 iPad 发送的时区将 UTC 值转换为正确的本地时间 看来我需要 Objec
  • 如何对齐多个表单元素?

    I ve no clue at design and I m trying to get a simple HTML form to look like this 基本上 它是一个表格three输入字段和one提交按钮 关于输入字段 有上面
  • 使用 Complete.ly 或 typeahead 检测并禁用移动设备上的自动完成功能

    在我的项目中我想使用 Complete ly 参见http complete ly appspot com http complete ly appspot com 或 typeahead js 参见http twitter github
  • javascript - 将数组转换为字符串,同时保留括号

    我有一个多维数组 如下所示 var myArray 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 我希望将其内容放在 div 中 以便可以轻松复制和粘贴 然而 当我这样做时 var x document g
  • 在 Visual Studio 中监视调用堆栈大小

    有没有办法监视 Visual Studio 中的调用堆栈大小 运行时会提供一个调用堆栈窗口 但不显示堆栈的大小 我正在使用 C 并面临堆栈溢出问题 我知道我正在使用的某些递归函数可能有问题 但在解决这些问题之前 我想监视调用堆栈大小以了解发
  • 构建 Apache Zeppelin 时出现错误

    我已经用cloudera 设置了hadoop 我想安装 zeppelin 来连接 hive 并为我的查询构建 UI 使用以下命令构建 zeppelin 命令时 sudo mvn clean package Pspark 1 3 Dspark
  • 由 WPF 应用程序托管时,Win32 应用程序不受 dpi 设置的影响

    我正在 wpf 应用程序中作为一个孩子启动一个旧的 win32 应用程序 问题是 win32 应用程序作为 wpf 应用程序的子应用程序运行时会忽略 dpi 设置 当 win32 应用程序在自己的窗口中启动时 dpi 设置可以达到预期的效果
  • 在 ASP.NET MVC 后的 ajax 中包含 antiforgerytoken

    我在使用 ajax 时遇到 AntiForgeryToken 问题 我正在使用 ASP NET MVC 3 我尝试了以下解决方案jQuery Ajax 调用和 Html AntiForgeryToken https stackoverflo
  • xcode 4.4 中的自动属性合成是如何工作的?

    我是 Objective C 和 XCode 的新手 但我很高兴看到 XCode 4 4 现在自动为我合成我的属性 我认为这意味着我不再需要为我的属性输入 synthesize 并且我可以使用以下方式访问它们self propertyNam
  • 打开一个新的 javascript 窗口(.open) 及其 CSS 样式

    我正在尝试让这个功能在我正在开发的项目的网站上运行 此函数的目的是仅 物理地 打印子 div 的内容 该子 div 巧合地称为选择器 content 这是我到目前为止所掌握的一点点 当用户点击 打印 超链接时 该函数就会被触发 新窗口将加载
  • 如何向图像添加 JPEG 注释 (COM)?

    我正在尝试使用 WPF 将 JPEG 注释添加到图像文件 尝试下面的代码让我ArgumentOutOfRangeException 设置其他属性没有问题 using Stream read File OpenRead my jpeg Jpe
  • Django - PUT/DELETE 请求中的参数存储在哪里?

    我想为我的新 django 项目遵循 RESTful 模式 并且我想知道发出 PUT DELETE 请求时参数在哪里 据我所知 我只在请求中看到 GET 和 POST QueryDict 没有其 他 Django 是否添加了与请求相关的新
  • 我的应用程序崩溃了,因为 firebase admob 依赖项抖动

    我按照这里的说明进行操作 https pub dartlang org packages firebase admob readme tab https pub dartlang org packages firebase admob re
  • HTTP 服务器未将完整文件发送到 WGET、Firefox。连接被对等方重置?

    我正在编写一个 HTTP 服务器 但在发送较大的文件时遇到问题 如果我用 netcat 抓取它们 输出看起来很完美 如果我使用浏览器或 wget 有时我只能得到完整的文件 WGET 不断收到 连接被对等方重置 错误 请参阅下面的输出 Fir
  • PostgreSQL 使用空数组解除嵌套

    我使用 postgreSQL 9 1 在我的数据库中有一个表 看起来像 id values 1 1 2 3 2 其中 id 是整数 values 是整数数组 数组可以为空 我需要取消这个列表的嵌套 如果我查询 select id unnes