select a.sfzh,a.phone,string_agg(DISTINCT unnest(string_to_array(b.ry_type,c.ry_type, ',')), ',') as type from hgry.ods_hgry_hgdjb a left join (select sfzhm,ry_type from hgry.bq_ry_type) b on a.sfzh=b.sfzhm left join (select phone,ry_type from hgry.bq_ry_type) c on a.phone=c.phone group by a.sfzh,a.phone查询报错You might be able to move the set-returning function into a LATERAL FROM item.
时间: 2024-02-24 17:54:53 浏览: 132
典型的数据库设计实例.doc
这个错误提示是因为 `unnest()` 函数被用在了聚合函数 `string_agg()` 中,而 `unnest()` 函数返回的是一个集合,这可能会影响聚合结果,因此建议将这个函数移到 `LATERAL FROM` 子句中。
你可以尝试将 `unnest()` 函数移到 `LATERAL FROM` 子句中,如下所示:
```sql
SELECT a.sfzh, a.phone, string_agg(DISTINCT t.ry_type, ',') AS type
FROM hgry.ods_hgry_hgdjb a
LEFT JOIN LATERAL (
SELECT ry_type FROM hgry.bq_ry_type WHERE sfzhm = a.sfzh
UNION
SELECT ry_type FROM hgry.bq_ry_type WHERE phone = a.phone
) t ON true
GROUP BY a.sfzh, a.phone;
```
这个查询首先将 `sfzhm` 和 `phone` 分别与 `hgry.bq_ry_type` 表中的两个子查询进行匹配,然后使用 `UNION` 操作将两个子查询的结果合并。最后,使用 `string_agg()` 函数将去重后的结果集合并成一个字符串。注意,在这个查询中,`UNION` 操作将返回多行结果,因此需要使用 `LATERAL` 关键字将查询转换为关联子查询,以便于对每一行结果进行计算。
注意,这个查询仅供参考,可能需要根据你的具体业务场景进行调整。
阅读全文