반응형
MariaDB의 JSON 배열에서 값을 필터링하는 방법은 무엇입니까?
저는 다른 학교의 몇몇 학생들이 도달한 점수를 저장하는 표를 가지고 있습니다.두 개의 열이 있습니다.school_name
그리고.students
(json 입력).표는 다음과 유사합니다.
학명 | 학생들 |
---|---|
애플 배 스쿨 | [ { "name": "John", "passed": 1 }, { "name": "Mary", "passed": 1 } ] |
빅 블루 스쿨 | [ { "name": "Bob", "passed": 1 } ] |
오크트리 아카데미 | [ { "name": "Caty", "passed": 1 }, { "name": "Mark", "passed": 0 } ] |
내 테이블에서 모든 행을 선택하고 싶지만,students
열은 다음에 의해 필터링되어야 합니다.passed
키, 그리고 그것을 가진 학생들만 일치시킵니다."passed": 1
그래서 내 질문에서 예상되는 결과는 다음과 같습니다.
학명 | 학생들 |
---|---|
애플 배 스쿨 | [ { "name": "John", "passed": 1 }, { "name": "Mary", "passed": 1 } ] |
빅 블루 스쿨 | [ { "name": "Bob", "passed": 1 } ] |
오크트리 아카데미 | [ { "name": "Caty", "passed": 1 } ] |
지금까지 시도한 질문입니다.
SELECT
school_name,
/* Extract from the JSON array the student objects that matched the condition */
JSON_EXTRACT(
students,
/* Get only the index '$[*]' */
TRIM(
TRAILING '.passed'
FROM JSON_UNQUOTE(
/* Search the path for all students that passed exam */
JSON_SEARCH(students, 'all', '1', null, '$[*].passed')
)
)
)
FROM mytable
이 쿼리는 json 배열에 한 명의 학생만 있을 때 잘 작동하지만, 조건과 일치하는 학생이 두 명 이상 있으면,JSON_SEARCH()
함수는 일치하는 항목을 포함하는 배열을 반환하고 나머지 코드는 실패합니다.
다음은 제 시도의 보고입니다.
학명 | 학생들 |
---|---|
애플 배 스쿨 | NULL |
빅 블루 스쿨 | { "name": "Bob", "passed": 1 } |
오크트리 아카데미 | { "name": "Caty", "passed": 1 } |
다음으로 인해 NULL 값이 표시됩니다.JSON_EXTRACT()
기능.
만약 내가 생략한다면,JSON_EXTRACT()
다음 쿼리를 사용합니다.
SELECT
school_name,
/* Get only the index '$[*]' */
TRIM(
TRAILING '.passed'
FROM JSON_UNQUOTE(
/* Search the path for all students that passed exam */
JSON_SEARCH(students, 'all', '1', null, '$[*].passed')
)
)
FROM mytable
보고서는 다음과 같습니다.
학명 | 학생들 |
---|---|
애플 배 스쿨 | ["$[0].passed", "$[1].passed"] |
빅 블루 스쿨 | $[0] |
오크트리 아카데미 | $[0] |
어떻게 하면 순수 mysql로 이를 달성할 수 있을까요, 미리 감사드립니다!
버전
SELECT VERSION()
+-----------------+
| version() |
+-----------------+
| 10.4.18-MariaDB |
+-----------------+
언급URL : https://stackoverflow.com/questions/71372563/how-to-filter-values-from-json-array-in-mariadb
반응형
'source' 카테고리의 다른 글
ISO 날짜를 yyyy-mm-dd 날짜 형식으로 변환하는 방법은 무엇입니까? (0) | 2023.07.28 |
---|---|
Spring Security 및 jQuery를 사용하여 만료된 세션을 처리하는 방법은 무엇입니까? (0) | 2023.07.28 |
Cython 코드를 포함하는 Python 패키지를 구성하는 방법 (0) | 2023.07.23 |
사용자 debian-message-main에 대한 액세스가 거부되었습니다. (0) | 2023.07.23 |
defaultdict의 default_factory에 키를 전달하는 영리한 방법이 있습니까? (0) | 2023.07.23 |