source

MariaDB의 JSON 배열에서 값을 필터링하는 방법은 무엇입니까?

factcode 2023. 7. 28. 22:56
반응형

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

반응형