我有一个带有集合列的表。我想做一个子选择,它返回几个整数并将结果放在该集合列中,但是我找不到通过SQL来完成它的语法。我通过编写一个执行相同操作的SQL过程(在SET变量中放置SELECT的结果并返回变量)来做到这一点,但是我试图在没有函数的情况下做同样的事情。可以吗?
首先,我创建一个临时表:
CREATE TEMP TABLE table1 (
id INTEGER
, col2 SET(INT NOT NULL)
)
然后我填写测试数据:
INSERT INTO table1 (id) VALUES (1);
INSERT INTO table1 (id) VALUES (2);
现在这有效:
UPDATE table1 SET col2 = SET{1,2};
...但我正在尝试这样做而且它不起作用:
UPDATE table1 SET col2 = (SELECT id FROM table1) WHERE id = 1;
它返回此错误:
[Error Code: -9632, SQL State: IX000] Value does not match the type of column (col2).
答案 0 :(得分:1)
在纯SQL中操作SET类型是一件痛苦的事。
您的UPDATE正在尝试将INTEGER分配给SET OF INTEGER,错误显示“您不能这样做”。
你应该可以这样做:
UPDATE table1
SET col2 = SET { (SELECT id FROM table1 WHERE id = 1) }
WHERE id = 1;
但是,我不确定在集合中获取多个值的正确修改是什么。内在的WHERE不是空闲的。
答案 1 :(得分:1)
您可以使用 MULTISET 和 ITEM 关键字来实现此目的 以下示例将起作用:
CREATE TEMP TABLE table1 (
id INTEGER
,col2 MULTISET(INT NOT NULL)
);
INSERT INTO table1 (id) VALUES (1);
INSERT INTO table1 (id) VALUES (2);
UPDATE table1 SET col2 = MULTISET{1,2};
UPDATE table1
SET col2 = MULTISET(SELECT ITEM id FROM table1)
WHERE id = 1;
请注意SET和MULTISET之间的区别
select set{1,2,1,3,1} from systables where tabid=1;
返回SET {1,2,3}
select multiset{1,2,1,3,1} from systables where tabid=1;
返回MULTISET {1,2,1,3,1}