PostgreSQL - 使用同一个表的其他列中的值更新一列

时间:2016-02-25 17:27:08

标签: postgresql if-statement updates

我正在尝试编写一个函数,该函数将使用存储在同一个表的多个列之一中的值来更新列。馈送列表示通常不完整的分类层次结构,因此我希望接收列存储最低的可用值。这是我最接近的,我觉得我还很远:)。

CREATE OR REPLACE FUNCTION get_taxon()
RETURNS void LANGUAGE plpgsql AS
$BODY$
BEGIN
    IF taxon.subespecie is not null THEN
      UPDATE taxon SET taxon = subespecie FROM taxon;
    ELSIF taxon.especie is not null THEN
      UPDATE taxon SET taxon = especie;
    ELSIF taxon.genero is not null THEN
      UPDATE taxon SET taxon = genero;
    ELSIF taxon.subfamilia is not null THEN
      UPDATE taxon SET taxon = subfamilia;
    ELSIF taxon.familia is not null THEN
      UPDATE taxon SET taxon = familia;
    ELSIF taxon.infraordem is not null THEN
      UPDATE taxon SET taxon = infraordem;
    ELSIF taxon.subordem is not null THEN
      UPDATE taxon SET taxon = subordem;
    END IF;
END;
$BODY$

当我调用该函数时,我收到此错误:

  

错误:表“taxon”缺少FROM子句条目第1行:SELECT   taxon.subespecie不为空

来自这里的公寓我也有一个普遍的疑问:应该为这样的函数声明什么样的RETURN,更新现有的字段?

1 个答案:

答案 0 :(得分:1)

对于此问题,您应该使用内置的coalesce()函数:

UPDATE taxon SET taxon = coalesce(subespecie, especie, genero, subfamilia, familia,
                                  infraordem, subordem)
WHERE taxon IS NULL;

coalesce()函数接受任意数量的参数,然后返回第一个非空值。