微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在联合功能中间编写一个 json 抛出错误

如何解决如何在联合功能中间编写一个 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 举报,一经查实,本站将立刻删除。