PostgreSQL IF语句

PostgreSQL IF语句,sql,postgresql,if-statement,plpgsql,Sql,Postgresql,If Statement,Plpgsql,如何在Postgres中进行这样的查询 IF (select count(*) from orders) > 0 THEN DELETE from orders ELSE INSERT INTO orders values (1,2,3); 从 因此,在上面的示例中,代码应如下所示: IF select count(*) from orders > 0 THEN DELETE from orders ELSE INSERT INTO orders values

如何在Postgres中进行这样的查询

IF (select count(*) from orders) > 0
THEN
  DELETE from orders
ELSE 
  INSERT INTO orders values (1,2,3);

因此,在上面的示例中,代码应如下所示:

IF select count(*) from orders > 0
THEN
  DELETE from orders
ELSE 
  INSERT INTO orders values (1,2,3);
END IF;
你错过了:如果结束

做 $do$ 开始 如果存在,则从订单中选择 从订单中删除; 其他的 在订单中插入值1、2、3; 如果结束; 终止 $do$ 标准SQL中没有过程元素。是默认过程语言PL/pgSQL的一部分。您需要使用该命令创建函数或执行特殊语句

你需要一个分号;在plpgsql中每个语句的末尾

你需要结束,如果;在IF语句的末尾

子选择必须用括号括起来:

    IF (SELECT count(*) FROM orders) > 0 ...
或:

这是等效的,而且速度要快得多,不过:

    IF EXISTS (SELECT FROM orders) ...
可供替代的 不需要额外的选择。这样做同样更快:

做 $do$ 开始 从订单中删除; 如果没有找到的话 在订单中插入值1、2、3; 如果结束; 终止 $do$
虽然不太可能,但写入同一个表的并发事务可能会产生干扰。绝对可以肯定的是,在进行演示之前,同一事务中的表将显示出来。

如果有人像我一样偶然发现这个问题,请提供帮助, 如果您想在PostgreSQL中使用if,可以使用CASE

select 
    case
        when stage = 1 then 'running'
        when stage = 2 then 'done'
        when stage = 3 then 'stopped'
    else 
        'not running'
    end as run_status from processes

您还可以将PL/pgSQL案例的基本结构与过程块一起使用:

DO $$ BEGIN
    CASE
        WHEN boolean-expression THEN
          statements;
        WHEN boolean-expression THEN
          statements;
        ...
        ELSE
          statements;
    END CASE;
END $$;
参考资料:


我最近在PostgreSQL中完成了CASE语句的使用,也许这会有所帮助

SELECT column_names,
CASE column_which_you_want_the_condition_to_be_executed
WHEN something_in_column_values_is_present then (select_statement_from_another_column)
WHEN something_in_column_values_is_present then 'anything_you_want_in_your_new_column_to_be_feeded'
ELSE 'NULL'
END
AS new_column_name
from table_where_you_want_to_execute_the_query

是的,我试过了,但不起作用。错误:if1处或附近出现语法错误。请不要链接测试版文档;2.您的示例需要包含在中才能用作SQL语句,而不是PL/pgSQL函数。@MilenA.Radev这是网站上提供的最新文档。此外,我在OP的初始帖子的基础上进行构建,以显示该语句的正确语法。@VladimirTsukanov是否将select中的值赋给变量?我也得到了相同的错误:if处或附近的语法错误–不起作用。我得到了错误:语法错误在第89行或附近:%do%@Luffydude:在我的代码中哪里可以找到%?IOW:上述语句有效,您引入了一个无关的语法错误。看起来您键入的是%do%,而不是$do$。想知道为什么PostgreSQL不能像t-SQL那样让它更简单?对于很多想跳pg的人来说,这是一个障碍。
DO $$ BEGIN
    CASE
        WHEN boolean-expression THEN
          statements;
        WHEN boolean-expression THEN
          statements;
        ...
        ELSE
          statements;
    END CASE;
END $$;
SELECT column_names,
CASE column_which_you_want_the_condition_to_be_executed
WHEN something_in_column_values_is_present then (select_statement_from_another_column)
WHEN something_in_column_values_is_present then 'anything_you_want_in_your_new_column_to_be_feeded'
ELSE 'NULL'
END
AS new_column_name
from table_where_you_want_to_execute_the_query