在Postgresql中使用表别名访问记录内的列
我试图使用记录数据类型对查询结果进行迭代。但是,如果尝试使用查询中定义的表别名访问一列,则会出现以下错误: 错误:架构“库存行”不存在 上下文:SQL命令“选择库存行s.processor库存行d.processor” PL/pgSQL函数“teste”在IF的第7行 以下是引发此错误的代码:在Postgresql中使用表别名访问记录内的列,postgresql,Postgresql,我试图使用记录数据类型对查询结果进行迭代。但是,如果尝试使用查询中定义的表别名访问一列,则会出现以下错误: 错误:架构“库存行”不存在 上下文:SQL命令“选择库存行s.processor库存行d.processor” PL/pgSQL函数“teste”在IF的第7行 以下是引发此错误的代码: CREATE OR REPLACE FUNCTION teste() returns void as $$ DECLARE inv_row record; BEGIN FOR inv_ro
CREATE OR REPLACE FUNCTION teste() returns void as $$
DECLARE
inv_row record;
BEGIN
FOR inv_row in SELECT * FROM sa_inventory s LEFT JOIN dim_inventory d ON s.macaddr = d.macaddr LOOP
IF inv_row.s.processor <> inv_row.d.processor THEN
<do something>;
END IF;
END LOOP;
END;
$$ language plpgsql;
CREATE或REPLACE函数teste()返回void作为$$
声明
存货行记录;
开始
对于s.macaddr=d.macaddr循环中从sa_库存的左侧连接dim_库存d中选择*的库存行
如果是第四排存货处理人,则为第四排存货处理人
;
如果结束;
端环;
结束;
$$语言plpgsql;
是否有其他方法可以访问记录数据类型中特定表的列?幸运的是,这里的答案相对简单。必须使用括号来表示元组:
IF (inv_row.s).processor <> (inv_row.d).processor THEN
IF(inv_row.s).处理器(inv_row.d).处理器然后
这是因为SQL指定了名称空间深度的含义,因此没有此PostgreSQL无法安全地确定这意味着什么。因此inv_row.s.processor
指inv_row
架构中s
表的processor
列。但是(inv\u row.s).processor
意味着取inf\u row表的s
列,将其视为一个元组,并取其processor
列。删除IF(…)ENDIF,并将inv\u row.s.processor inv\u row.d.processor
添加到where子句或联接条件?顺便说一句:qou不能在resultrow中采用“三个.级别.名称”。resultrow只有一个级别的名称。在您的查询中命名它们(选择x.y作为a,p.q作为b…
),您将在那里。