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 第一个非空值。
我正在尝试编写一个函数,该函数将使用存储在同一 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 第一个非空值。