【发布时间】:2017-09-28 20:19:06
【问题描述】:
我正在尝试使用 UNION 规则对单个表执行多个查询
我有两张桌子:
- 项目(id、名称、固定布尔值)
- 技能(m2m 到项目)
我希望首先获取一组将 pinned 设置为 true 的行,然后用最新条目填充剩余的行(pinned 设置为 false)
SELECT
project.id AS project_id,
project.name AS project_name,
array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.pinned = true
GROUP BY project_id,project_name
UNION
SELECT
project.id AS project_id,
project.name AS project_name,
array_agg(json_build_object('skill_id', project_skills.id,'name', project_skills.skill)) AS skills
from project
LEFT OUTER JOIN project_skills on project.name = project_skills.project
WHERE project.id != 1 AND project.pinned = false
GROUP BY project_id,project_name
ORDER BY project.create_date DESC LIMIT 5
执行此查询时,我收到以下错误
ERROR: could not identify an equality operator for type json[] LINE 7: array_agg(json_build_object('skill_id', project_skills.id,...
我不明白这个错误。它是否因为试图比较两个结果中的 json 列而失败?
我使用的是 Postgres 9.4。
【问题讨论】:
标签: json postgresql union