函数返回的记录具有串联的列
当使用函数为特定目的检索数据时,可能会遇到返回的结果记录的列连接成单个列。当函数用作另一个查询中的子查询时,可能会发生这种情况。
理解函数结果
要分解从函数返回的行并获取各个列,只需单独执行该函数:
SELECT * FROM account_servicetier_for_day(20424, '2014-08-12');
这将提供具有预期柱状的输出
解决原始查询
要解决原始查询的问题,根据所使用的 PostgreSQL 版本,有多种方法:
PostgreSQL 9.3 或更高版本
使用 JOIN LATERAL 连接子查询并保留行结构:
SELECT '2014-08-12' AS day, 0 AS inbytes, 0 AS outbytes , a.username, a.accountid, a.userid , f.* -- but avoid duplicate column names! FROM account_tab a , account_servicetier_for_day(a.accountid, '2014-08-12') f -- <-- HERE WHERE a.isdsl = 1 AND a.dslservicetypeid IS NOT NULL AND NOT EXISTS ( SELECT FROM dailyaccounting_tab WHERE day = '2014-08-12' AND accountid = a.accountid ) ORDER BY a.username;
PostgreSQL 9.2 或更旧
使用子查询调用函数并分解外层中的行查询:
SELECT '2014-08-12' AS day, 0 AS inbytes, 0 AS outbytes , a.username, a.accountid, a.userid , (a.rec).* -- but be wary of duplicate column names! FROM ( SELECT *, account_servicetier_for_day(a.accountid, '2014-08-12') AS rec FROM account_tab a WHERE a.isdsl = 1 AND a.dslservicetypeid Is Not Null AND NOT EXISTS ( SELECT FROM dailyaccounting_tab WHERE day = '2014-08-12' AND accountid = a.accountid ) ) a ORDER BY a.username;
无论哪种方法,在选择分解时都要注意潜在的重复列名行。
以上是为什么我的 PostgreSQL 函数返回的列是串联的,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!