当列名不明确时如何访问记录类型?

时间:2015-08-13 14:09:58

标签: postgresql

我有这个功能,我将查询结果存储在RECORD类型变量中。

问题是我的查询的两个表有一个具有相同名称的列(“description”),我不知道如何使用RECORD变量来区分这两个。

CREATE OR REPLACE FUNCTION fn_x(_id BIGINT)
RETURNS TEXT AS $BODY$

DECLARE
    l_row RECORD;
    l_tableADescription TEXT;
    l_tableBDescription TEXT;

BEGIN
    SELECT *
    INTO l_row
    FROM tableA a
    JOIN tableB b ON (a.idA = b.idA)
    WHERE e.idA = _id;

    -- problem is here
    l_tableADescription = l_row.tableA.description;
    l_tableBDescription = l_row.tableB.description;

    -- do other stuff

    RETURN '';

END;
$BODY$
  LANGUAGE plpgsql STABLE;

AS子句中使用SELECT不是一个选项,因为这两个表有很多列。

我正在使用PostgreSQL 9.4.4

1 个答案:

答案 0 :(得分:0)

如果列名不是唯一的,我不知道在输入查询时命名变量的任何方法。即:

SELECT a.description AS t1Desc, b.description AS t2Desc, *
INTO row
FROM tableA a 
JOIN tableB b ON (a.idA = b.idB);

然后从RECORD变量中单独访问它们:

tableADescription_1 = row.t1Desc;
tableBDescription_1 = row.t2Desc;

使用查询中指定的名称,而不是表中的原始列名称。

这就是我们在一个项目中使用的,我们在一个具有通用名称的连接中有两个表。