SQL Подзапрос ошибки должен возвращать только один столбец - PullRequest
1 голос
/ 01 августа 2020

I wi sh, когда выполняется условие 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.

1 Ответ

0 голосов
/ 01 августа 2020

Я подозреваю , что вам нужен оператор update, а не insert, потому что вы упоминаете, что хотите, чтобы значения были изменены . Это то, что делает update, а insert создает новые строки.

logi c, который вы ищете, может быть:

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 блок для реализации этого logi c, достаточно прямого запроса.

...