if 条件中的 Postgres 语法错误
Postgres syntax error in if condition
我正在尝试计算佣金并根据该佣金值 (commiss) 我想更新列值 fixed_fee
select st1.* ,(st1.order_item_value * st1.commission_rate)/100 commiss ,
if commiss < 50 then
update payment_error set fixed_fee = -5 where commiss <= 50
else if commiss >= 50 then
update payment_error set fixed_fee = -10 where commiss >=50
else
end if
from payment_error as st1 join payment_error as st2 on st1.order_item_id=st2.order_item_id ;
while 运行 is then error come is :
ERROR: syntax error at or near "<"
LINE 2: if commiss<50 then
^
********** Error **********
ERROR: syntax error at or near "<"
SQL state: 42601
Character: 87
不能同时使用更新和 select。要更新你可以试试这个:
update payment_error
set fixed_fee = case when (order_item_value * commission_rate * .01) < 50 then -5
else 5 --In your case you have use both as -5 so change it as per your reqm
您不能在 SQL 中使用 if
。这仅适用于 PL/pgSQL 等过程语言。
但更重要的是,您不能像这样在 select
语句中嵌入 update
语句。
您尝试做的事情可以通过使用 CASE
:
的单个 UPDATE
语句来完成
update payment_error
set fixed_fee = case
when (order_item_value * commission_rate)/100 <= 50 then -5
else 5 --<<< different value here
end;
在这两种情况下,您都将 fixed_fee 设置为 -5 - 我假设这是一个打字错误,您的意思是在佣金大于 50[=16] 的情况下分配不同的费用=]
我正在尝试计算佣金并根据该佣金值 (commiss) 我想更新列值 fixed_fee
select st1.* ,(st1.order_item_value * st1.commission_rate)/100 commiss ,
if commiss < 50 then
update payment_error set fixed_fee = -5 where commiss <= 50
else if commiss >= 50 then
update payment_error set fixed_fee = -10 where commiss >=50
else
end if
from payment_error as st1 join payment_error as st2 on st1.order_item_id=st2.order_item_id ;
while 运行 is then error come is :
ERROR: syntax error at or near "<"
LINE 2: if commiss<50 then
^
********** Error **********
ERROR: syntax error at or near "<"
SQL state: 42601
Character: 87
不能同时使用更新和 select。要更新你可以试试这个:
update payment_error
set fixed_fee = case when (order_item_value * commission_rate * .01) < 50 then -5
else 5 --In your case you have use both as -5 so change it as per your reqm
您不能在 SQL 中使用 if
。这仅适用于 PL/pgSQL 等过程语言。
但更重要的是,您不能像这样在 select
语句中嵌入 update
语句。
您尝试做的事情可以通过使用 CASE
:
UPDATE
语句来完成
update payment_error
set fixed_fee = case
when (order_item_value * commission_rate)/100 <= 50 then -5
else 5 --<<< different value here
end;
在这两种情况下,您都将 fixed_fee 设置为 -5 - 我假设这是一个打字错误,您的意思是在佣金大于 50[=16] 的情况下分配不同的费用=]