当前位置: 首页 > 面试题库 >

从数组中删除一个非唯一值

胡俊贤
2023-03-14
问题内容

给定PostgreSQL 9.6中的此表:

CREATE TABLE test_table (
   id int PRIMARY KEY
 , test_array text[]
);

与像这样的行:

INSERT INTO test_table (id, test_array)
VALUES (1 , '{A,A,A,B,B,B}');

如何删除一个单一的“ B”值?

我不能使用:

UPDATE test_table
SET test_array = array_remove(test_array, 'B')
WHERE id = 1;

因为它会删除 所有 值“ B”的元素。我只是想删除一个元素(例如,第一个)。

有任何想法吗?


问题答案:

根据我在dba.SE上找到的旧答案,并充分利用了它:

您可能会更进一步:

CREATE OR REPLACE FUNCTION f_array_remove_elem1(anyarray, anyelement)
  RETURNS anyarray LANGUAGE sql IMMUTABLE AS
'SELECT $1[:idx-1] || $1[idx+1:] FROM array_position($1, $2) idx';

此函数将要删除的元素的值作为第二个参数。相应地使用多态伪类型anyelement使它适用于任何数组类型。

那么UPDATE简单的是:

UPDATE test_table
SET    test_array = f_array_remove_elem1(test_array, 'B')
WHERE  id = 1;

db
<>在这里拨弄

当使用我的原始函数f_array_remove_elem()获取索引位置而不是元素值时,您可以不使用子查询:

UPDATE test_table
SET    test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE  id = 1;

甚至可能比我的新功能快一点。
并请注意,我的旧答案底部的较简单版本适用于Postgres 9.6。



 类似资料:
  • 问题内容: 说我有这些二维数组A和B。 如何从B中删除A中的元素。(集合论中的补语:AB) 更准确地说,我想做这样的事情。 问题答案: 基于this solution对,这里是用更少的内存占用与NumPy基础的解决方案,并与大型阵列工作时,可能是有益的- 样品运行- 在大型阵列上的运行时测试- 具有基础解决方案的时间- 基于更少内存占用量的定时解决方案- 进一步提升性能 通过将每一行视为索引元组来

  • 我想从数组中删除一个特定的数字 这是在创造0-7的数字,但我不需要0,我需要1-7的数值

  • 问题内容: 如何使用phpMyAdmin在MySQL表的列上删除“唯一键约束”? 问题答案: 唯一约束也是索引。 首先使用来查找索引的名称。索引的名称存储在该查询结果中调用的列中。 然后,您可以使用DROP INDEX: 或ALTER TABLE语法:

  • 问题内容: 我有以下数组。 我想删除最后一个元素,即2。 我用过,但不会删除值。 问题答案: 使用拼接(索引,多个)

  • 给定下面的代码: HTML: 断续器 我必须使用此代码才能删除元素吗?它似乎太冗长了。

  • 问题内容: 我有两个数组 我想从array1中删除array2的元素 问题答案: 最简单的方法是将两个数组都转换为集合,从第一个数组中减去第二个数组,将结果转换为数组,然后将其分配回: 请注意,您的代码不是有效的Swift-您可以使用类型推断来声明和初始化两个数组,如下所示: