如何解决如何在联合功能中间编写一个 json 抛出错误
我在union中间写了一个union函数,写了一个json对象是参数之一,但是抛出错误:无法识别json类型的相等运算符。这是我的代码。
select(SELECT array_to_json(array_agg(row_to_json(resdt))) FROM
(select vt.task_id,vp.project_name,vp.status as project_status,vt.project_id,vt.task_description,vt.planned_start_date,vt.planned_end_date,(select array_to_json(array_agg(row_to_json(b))) FROM
(select vl.*
from public."VOfficeApp_task" vat
inner join public."VOfficeApp_task_labels" vtl on vat.task_id = vtl.task_id
inner join public."VOfficeApp_labels" vl on vl.label_id = vtl.label_id
where vl.status = true
and vat.task_id = vt.task_id
)b)as label_name,(select array_to_json(array_agg(row_to_json(b))) FROM
(select tr.task_resource_id,tr.task_id,tr.project_resource_id,tr.assigned_date,tr.assigned_by,pr.employee_id as id,concat(u.first_name,u.last_name) as employeename
from public."VOfficeApp_task" vtr
inner join public."VOfficeApp_project_resources" pr on pr.project_id = vtr.project_id
inner join public."VOfficeApp_task_resource" tr on tr.project_resource_id = pr.project_resource_id
and tr.task_id = vt.task_id
inner join public."VOfficeApp_user" u on u.id =pr.employee_id
where tr.released_date is null and vtr.task_id =vt.task_id
and vtr.status != 'Delete')b)as user_name,(select count(task_id)from public."VOfficeApp_task" ptra
where ptra.task_id = vt.task_id
and status = 'Assigned')Active_count,from public."VOfficeApp_task" vt
inner join public."VOfficeApp_projects" vp on vt.project_id = vp.project_id
inner join public."VOfficeApp_task_resource" vtr on vt.task_id = vtr.task_id
inner join public."VOfficeApp_project_resources" vpr on vtr.project_resource_id = vpr.project_resource_id
left join public."VOfficeApp_conversation" cvv on cvv.projtaskid = vt.task_id
where vp.company_id = companyid
and vp.created_by = createdby
and vt.status != 'Delete'
--order by vt.task_id desc
工会 选择 vt.task_id,vp.status 作为 project_status, vt.project_id,
(select array_to_json(array_agg(row_to_json(b))) FROM
(select vl.*
from public."VOfficeApp_task" vat
inner join public."VOfficeApp_task_labels" vtl on vat.task_id = vtl.task_id
inner join public."VOfficeApp_labels" vl on vl.label_id = vtl.label_id
where vl.status = true
and vat.task_id = vt.task_id
)b)as label_name,from public."VOfficeApp_task" vt
inner join public."VOfficeApp_projects" vp on vt.project_id = vp.project_id
inner join public."VOfficeApp_task_resource" vtr on vt.task_id = vtr.task_id
inner join public."VOfficeApp_project_resources" vpr on vtr.project_resource_id = vpr.project_resource_id
--inner join public."VOfficeApp_user" u on u.id =vpr.employee_id
where vp.company_id = companyid and vpr.employee_id = createdby
and vt.status != 'Delete'
--order by vt.task_id desc
)resdt)as My_tasks;
解决方法
正如消息所暗示的,json 没有定义相等运算符,并且需要其中之一来实现 UNION 的重复数据删除功能。而且 json 没有规范化它的值,所以不清楚平等的明确定义是什么。是否应该将 '{"a":"b","c":"d"}' 视为与 '{"c":"d","a":"b"}' 不同?
您可以升级到受支持的数据库版本,然后使用 jsonb 而不是 json。这确实定义了一个相等运算符,并将上面的两个示例视为相同。
如果重复数据删除对您来说不是必需的,您可以将 UNION 更改为 UNION ALL。
您可以将 json 转换为每个 SELECT 中的文本。这将两个示例视为不同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。