如何在h2中收回和更新数组中的值?
因为我试图管理数组中Set
个不同的值,所以我不知道值在数组中的顺序/位置,所以可以
因此,只按值操作,而不使用值在数组中的位置-如果可能的话?
(我可以忍受数组中的重复值,因为我将查询的数组值加载到Set
中,这将自动过滤掉重复值.)
我可以使用串联添加一个值:
DROP TABLE A IF EXISTS;
CREATE TABLE A(id INT PRIMARY KEY AUTO_INCREMENT, ints INT ARRAY);
INSERT INTO A(ints) VALUES (ARRAY[1, 2]);
SELECT ints FROM A WHERE id = 1;
// [1, 2]
// Concatenate
UPDATE A SET ints = ints || 3;
SELECT ints FROM A WHERE id = 1;
// [1, 2, 3]
但我如何才能收回一个特定值呢?
// How to retract 2?
UPDATE A SET ints = ???;
SELECT ints FROM A WHERE id = 1;
// [1, 3]
// Or, how to retract 1 and 2?
UPDATE A SET ints = ???;
SELECT ints FROM A WHERE id = 1;
// [3]
如何将一个值更新为另一个值?
// How to replace 1 with 10?
UPDATE A SET ints = ???;
SELECT ints FROM A WHERE id = 1;
// [10, 2, 3]
// Or, how to replace 1 with 10 and 3 with 30?
UPDATE A SET ints = ???;
SELECT ints FROM A WHERE id = 1;
// [10, 2, 30]
我try 了各种解嵌套值的方法,并对它们进行过滤以排除(收回)某些值,然后沿着以下(错误的)行将它们聚合回来,但没有成功:
UPDATE A
SET ints = ARRAY_AGG(
(SELECT * FROM UNNEST(SELECT ints FROM A) WHERE c1 != 2)
)
WHERE id = 1;
更新:我可以获得所需的筛选值:
SELECT * FROM UNNEST(SELECT ints FROM A) where c1 != 2;
// C1
// 1
// 3
但是,我无法从这些值创建数组(我可以将其设置为ints
):
VALUES ARRAY(
SELECT * FROM UNNEST(SELECT ints FROM A) where c1 != 2
);
// C1
// [null, null]