PostgreSQL - 使用同一列的其他列的值更新一列 table

PostgreSQL - Update one column with values from other columns of the same table

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

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$

当我调用该函数时出现此错误:

ERROR: missing FROM-clause entry for table "taxon" LINE 1: SELECT taxon.subespecie is not null

除此之外,我还有一个普遍的疑问:应该为像这样更新现有字段的函数声明哪种 RETURN

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

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

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