SQL 错误子查询必须return 只有一列
SQL Error subquery must return only one column
我想做的是当满足if的条件时,两列的值可以改变。我是 SQL 的新手,你能帮帮我吗?我的代码:
DO
$do$
BEGIN
IF (select * from V1 where starting-lag >= 7)
THEN
INSERT INTO newstart VALUES (starting - 7);
INSERT INTO newend VALUES (starting - 8);
ELSE
INSERT INTO newstart VALUES (lag +1);
INSERT INTO newend VALUES (lag);
END IF;
END
$do$
;
V1(id, starting, ending, lag, lead,newstart,newend)
它returns:
ERROR: subquery must return only one column
LINE 1: SELECT (select * from V1 where (starting-lag) >= 7)
^
QUERY: SELECT (select * from V1 where (starting-lag) >= 7)
CONTEXT: PL/pgSQL function inline_code_block line 3 at IF
我尝试使用更新,但它 returns DETAIL: Views that return window functions are not automatically updatable. HINT: To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule.
我 怀疑 你想要一个 update
语句而不是 insert
,因为你提到你希望值是 改变了。这就是 update
所做的,而 insert
创建新行。
您正在寻找的逻辑可能是:
update v1
set
newstart = case
when starting - lag >= 7 then starting - 7
else lag + 1
end,
newend = case
when starting - lag >= 7 then starting - 8
else lag
end
不需要do
块来实现这个逻辑,直接查询就足够了。
我想做的是当满足if的条件时,两列的值可以改变。我是 SQL 的新手,你能帮帮我吗?我的代码:
DO
$do$
BEGIN
IF (select * from V1 where starting-lag >= 7)
THEN
INSERT INTO newstart VALUES (starting - 7);
INSERT INTO newend VALUES (starting - 8);
ELSE
INSERT INTO newstart VALUES (lag +1);
INSERT INTO newend VALUES (lag);
END IF;
END
$do$
;
V1(id, starting, ending, lag, lead,newstart,newend)
它returns:
ERROR: subquery must return only one column
LINE 1: SELECT (select * from V1 where (starting-lag) >= 7)
^
QUERY: SELECT (select * from V1 where (starting-lag) >= 7)
CONTEXT: PL/pgSQL function inline_code_block line 3 at IF
我尝试使用更新,但它 returns DETAIL: Views that return window functions are not automatically updatable. HINT: To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule.
我 怀疑 你想要一个 update
语句而不是 insert
,因为你提到你希望值是 改变了。这就是 update
所做的,而 insert
创建新行。
您正在寻找的逻辑可能是:
update v1
set
newstart = case
when starting - lag >= 7 then starting - 7
else lag + 1
end,
newend = case
when starting - lag >= 7 then starting - 8
else lag
end
不需要do
块来实现这个逻辑,直接查询就足够了。