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块来实现这个逻辑,直接查询就足够了。