sql error子查询只能返回一列

1yjd4xko  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(422)

我希望在满足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)

它返回:

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

我试图使用更新,但它返回 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.

wmvff8tz

wmvff8tz1#

我怀疑你想要一个 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 块来实现这个逻辑,一个直接的查询就足够了。

相关问题