UNION을 사용할 때 json[] 유형의 등호 연산자를 식별할 수 없습니다.
를 사용하여 단일 테이블에서 여러 쿼리를 수행하려고 합니다.UNION
규칙.
테이블이 두 개 있습니다.
- 프로젝트(ID, 이름, 핀 부울)
- 스킬(프로젝트에 200만 m)
먼저 다음 행의 배열을 찾고 있습니다.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를 사용하고 있습니다.
를 사용하는 경우UNION
DBMS는 중복된 행을 모두 삭제합니다.이렇게 하려면 , 2 행이 같거나 같은지 아닌지를 특정할 필요가 있습니다.즉, 비교 중인 두 행의 각 열을 보고 동일한지 여부를 확인하는 것입니다.
에러 메세지가 표시되고 있는 것은, 다음의 어느쪽인가를 사용해 열이 작성되고 있는 경우입니다.array_agg(json_build_object(...))
유형적인 가치를 만들어냅니다.json[]
즉, "json 값의 배열"을 의미합니다.Postgres는 JSON 값의 2개의 어레이를 비교하는 방법을 모르기 때문에 Postgres는 JSON 값의 2개의 어레이를 비교할 수 없습니다.UNION
생성된 복제품.
실제로 중복 제거를 신경 쓰지 않는 경우 가장 간단한 해결책은UNION ALL
이 스텝은 생략합니다.
코멘트에서 지적한 바와 같이 중복을 제거하려면 비교 연산자가 정의된 값으로 값을 지정할 수 있습니다.가장 일반적인 해결책은 텍스트에 캐스팅하는 것입니다(예:some_value::text
또는CAST(some_value as text)
JSON의 경우 포맷이 무시되는 타입이 필요할 수 있습니다.
캐스팅 할 수 있어json
로.jsonb
, 또는json[]
로.jsonb[]
또는 이 예에서는,jsonb
직접 와 함께array_agg(jsonb_build_object(...))
보다는array_agg(json_build_object(...))
.
알고 보니 내가 해야 할 일은UNION ALL
- 이것은 비교하려는 시도를 무시한 것 같습니다.json
여러 쿼리에 걸쳐 유형을 지정합니다.
언급URL : https://stackoverflow.com/questions/43718733/couldnt-identify-equality-operator-of-type-json-when-using-union
'source' 카테고리의 다른 글
스프링 보안 로그인 화면을 비활성화하려면 어떻게 해야 합니까? (0) | 2023.02.12 |
---|---|
들어오는 장고 요청의 JSON 데이터는 어디 있나요? (0) | 2023.02.08 |
testing-library-react의 "update was not wraped in act()" 경고를 해결하려면 어떻게 해야 합니까? (0) | 2023.02.08 |
Json 문자열을 C# 객체 목록으로 변환 (0) | 2023.02.08 |
골랑 구조의 XML 및 JSON 태그? (0) | 2023.02.08 |