问题标签 [unnest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4092 浏览

postgresql - 在不创建临时表的情况下加入数组 unnest 的输出

我在 UDF 中有一个查询(如下所示),它unnest()是一个整数数组并连接它,我在我的 pgplsql UDF 中创建了一个本地临时表,因为我知道这是有效的。是否可以unnest直接在查询中使用来执行连接,而不必创建临时表?

我想这样做的原因是我希望能够查看查询计划,而不必求助于查看服务器日志中的自动解释输出。本地临时表可以防止这种情况。即,我无法复制粘贴结果查询并逐字执行。

0 投票
2 回答
23311 浏览

sql - 将 UNNEST 与 JOIN 一起使用

我希望能够unnest()在具有许多JOINs 的复杂 SQL 查询中使用 PostgreSQL 中的函数。这是示例查询:

我想消除taggings这里的表,因为我的mentions表有一个名为taglist的整数数组字段,其中包含.mentions

我试过以下:

这可行,但会带来与第一个查询不同的结果。

所以我想做的是使用查询中的结果SELECT unnest(taglist)JOIN补偿taggings表。

我怎样才能做到这一点?

更新: taglist与提及的相应标签 ID 列表相同。

0 投票
1 回答
3315 浏览

arrays - 转换 unnest() 的结果时丢失 NULL 元素

unnest()在扩展数组后进行投射时,我偶然发现了非常奇怪的行为。

介绍

使用 unnest() 有三种基本语法变体:

1) SELECT unnest('{1,NULL,4}'::int[]) AS i;
2) SELECT i FROM unnest('{2,NULL,4}'::int[]) AS i;
3)SELECT i FROM (SELECT unnest('{3,NULL,4}'::int[])) AS t(i);

所有这些都在结果中包含一行,NULL如预期的那样

要将数组元素转换为不同的类型,可以在扩展数组后立即将元素转换为基本类型,或者在扩展之前将数组本身转换为不同的数组类型。第一个变体对我来说似乎更简单更短:

甲)SELECT unnest('{4,NULL,1}'::int[])::text;
乙)SELECT unnest('{4,NULL,2}'::int[]::text[]);

奇怪的行为

所有可能的组合,除了2A)

由于某种原因,无法2)A)

错误:“::”处或附近的语法错误

我可以接受。由于某种原因尚未实施的罕见极端案例。
但是,所有其他组合都会飞:

1A) SELECT unnest('{1,NULL,1}'::int[])::text AS i;
2A)SELECT i FROM unnest('{2,NULL,1}'::int[])::text AS i;
3A) SELECT i FROM (SELECT unnest('{3,NULL,1}'::int[])::text) AS t(i);
1B) SELECT unnest('{1,NULL,2}'::int[]::text[]) AS i;
2B) SELECT i FROM unnest('{2,NULL,2}'::int[]::text[]) AS i;
3B)SELECT i FROM (SELECT unnest('{3,NULL,2}'::int[]::text[])) AS t(i);

结果与上述相同。

真的很奇怪的行为

以下意见A)仅涉及。可以通过替换来避免该问题B)

正如预期的那样,到目前为止,我们已经看到数组中的元素在所有查询中都NULL产生了具有值的行。但是,将结果从某些数组类型转换为某些基本类型NULL时,情况并非如此。

这里具有NULL 值的行突然消失(!):

例子

我去看看兔子洞有多深。这里有些例子:

NULL消失:

NULL停留:

这似乎是不可接受的。

在测试了相当多的组合之后,模式似乎是:

相关类型之间的强制转换会导致NULL元素丢失。
在不相关类型之间进行强制转换会导致NULL元素被保留。
除了varchar[]->text反之亦然,这破坏了我的这个小假设。或者varchartext我想象的不同。

使用 PostgreSQL 9.1 和 9.2 测试。相同的结果。
-> SQL小提琴

问题

我在这里错过了什么吗?有人可以解释这种行为吗?
如果没有,问题就变成了:我应该继续提交错误报告吗?

0 投票
1 回答
575 浏览

sql - 新的数组聚合函数

我有一张这样的桌子:

它包含每个员工的工作时间(数组中的列是一周中的天数,u并且x是空闲天数)。
是否可以将这些行聚合成一个包含每个 col 的总和的行(如果它是一个 int)?

我的目标是从这样的查询答案中获得:{24,16,16,0,8,0,0}

0 投票
1 回答
676 浏览

sql - Postgresql以通用方式将列更改为行

需要从包含大约一百列的表中检索键值对(列名,值)。

以下查询正是需要的。

但是,它需要明确指定列。

有没有办法通过根本不直接指定列名或动态生成来生成相同的输出。

0 投票
2 回答
2209 浏览

sql - 将多维数组转换为记录

给定:{{1,"a"},{2,"b"},{3,"c"}}
期望:

您可以使用以下查询获得预期结果;但是,最好有一些随数组大小缩放的东西。

0 投票
1 回答
6349 浏览

arrays - 复合类型数组作为存储过程输入

我正在使用 plpgsql 创建一个存储过程,方法是传递一个类型数组并在过程中执行一个循环,以便我可以插入每个信息类型

问题是我不知道如何将函数与数组输入一起使用。我做了一些实验(只有一些愚蠢的输入):

但是 PostgreSQL 说它是一个record[],我还没有测试循环部分......

我在这个链接中发现了一个类似的问题:
Declare variable of composite type in PostgreSQL using %TYPE
但它没有使用数组。如果这只是一个重复的问题,也许你们可以指出我正确的方向!

0 投票
1 回答
267 浏览

sql - 如何获得 3 维数组的最小值或最大值?

如何在 PostgreSQL 中找到 3 维数组的最大(或最小)元素?

有没有什么功能或更快的方法来代替这个?:

0 投票
1 回答
17950 浏览

sql - 单个选择列表中的 SQL 多个 UNNEST

我正在实施一个查询系统。我实现了 unnest 功能。现在用户询问是否在单个 select 语句中使用多个 unnest。我使用 PostgreSQL 作为一种指南,因为大多数用户在我们的查询系统之前使用它。

PostgreSQL 有这样奇怪的行为:

我的实现总是生成为笛卡尔积。我想知道,这背后的正确逻辑是什么?PostgreSQL 是在做正确的事还是只是一个错误?我没有在 ANSI 文档或 PostgreSQL 文档中找到明确的描述。

0 投票
1 回答
83 浏览

angularjs - angularjs unnest ng-repeats 进入一个查询

如何将其取消嵌套到一个查询中。我想象它是这样的:

对象 blub 有多个标签,有多个 blub 对象。

编辑:Plunker: http ://plnkr.co/edit/mWjyryOsV5zZJisZzV3D 目标:将 ng-repeat 减少 2 倍为显示相同标签的 ng-repeat。