postgresql - 在简单的 PostgreSQL 函数返回表中避免“歧义列”
问题描述
假设我有下表、函数和执行:
create table mytable (a INTEGER, b INTEGER);
create function test(q INTEGER)
returns table(a INTEGER, b INTEGER)
as
$body$
begin
return query select a,b from mytable;
end;
$body$
language plpgsql STABLE;
select * from test(1);
我收到“不明确的列名”错误。我可以通过将选择更改为“从 mytable t 中选择 ta,tb”(根据一些类似的帖子)来摆脱它。但是当我的查询中只有 1 个表时,必须限定列名似乎很奇怪。我正在移植代码,该代码具有从单个表(以各种方式)中选择的大量存储过程并返回具有相同名称的列的表。有没有比这更好的方法来避免错误,并且仍然有一个具有相同列名的输出表?
感谢任何线索。
解决方案
你可以(你应该)使用别名。
create table mytable (a INTEGER, b INTEGER);
create function test(q INTEGER)
returns table(a INTEGER, b INTEGER)
as
$body$
begin
return query select mt.a, mt.b from mytable mt;
end;
$body$
language plpgsql STABLE;
select * from test(1);
推荐阅读
- reactjs - 如何在 res.data 之后设置两个不同的 useState
- reactjs - Material-UI : DataGrid/XGrid 如何检测密度变化?
- java - Mybatis关联模型中一对一但数据库中一对多:没有崩溃?
- date - 两个日期之间的工作日差异
- python - 如何在 Python 中自动将数组放入矩阵元素中?
- sql - 错误:“uuid”第 4 行或附近的语法错误:imp_group uuid[] = '00000000-0000-0000-0000-000000000000';
- ios - Flutter Plugin / iOS / CallKit Provider 没有收到 CXStartCallAction 事件
- python - matplotlib 对数图中的次要网格线
- regex - 尝试使用负前瞻解析代码
- javascript - 每次我想通过 ID 获得公会时未定义