我有一个复杂的查询连接多个表和返回许多成员ID(5号线)
对于每个MEMBERID我想插入memberSegment记录,由MEMBERID(新每个插入)和segmentId(总是相同/不清单)
INSERT INTO db."memberSegment"(
"memberId",
"segmentId")
VALUES (
(select table."memberId" complex query returns many ids ),
(SELECT id FROM db.segment where "idName" = 'due-for-360')
);
从阅读上,所以这是我如何理解它看起来应该,但我得到以下错误消息,让我觉得我的查询并不预期任何一个值的列表。
错误:由用作表达式SQL状态的子查询返回多于一行:21000
在其下自己的回报每一个查询:
您也许能够短语以此为INSERT INTO ... SELECT
:
INSERT INTO db."memberSegment" (memberId, segmentId)
SELECT
memberId,
(SELECT id FROM db.segment WHERE idName = 'due-for-360')
FROM table -- (complex query returns many ids );
这将至少是绕过当前的错误,这是从查询返回不止一个ID而产生。唯一可能的问题是,如果在db.segment
子查询也返回不是单个值更。如果没有的话,上面应该工作。如果它返回多于一个值,那么你的逻辑需要重新考虑。
例如:
CREATE OR REPLACE FUNCTION f_get(ikey text)
returns integer
AS
$func$
DECLARE
l_id integer;
BEGIN
LOCK TABLE foo IN SHARE ROW EXCLUSIVE MODE;
INSERT INTO foo (type)
SELECT ikey
WHERE NOT EXISTS (
SELECT * FROM foo WHERE type=ikey
)
returning id into l_id; --< store the returned ID in local variable
return l_id; --< return this variable
END
$func$ LANGUAGE plpgsql;