반응형
특정 자식 값의 부모 키를 가져오는 mariadb json 쿼리
계약서를 json 형식으로 mariadb 데이터베이스(10.3.21)에 저장한 클라이언트를 받았습니다.
부모 키는 계약형태의 아이디입니다. cb = 체크박스를 켜면 (1), (0), p & pt는 가격관련으로 제 질문과는 관련이 없습니다.
단순화된 json 형식은 다음과 같이 구성됩니다.
{
"1": {
"cb": "0",
"p": "1",
"pt": "m"
},
"2": {
"cb": "1",
"p": "395",
"pt": "y"
},
"3": {
"cb": "0",
"p": "",
"pt": "m"
},
"7": {
"cb": "1",
"p": "120",
"pt": "m"
}
}
특정 계약 유형을 가진 모든 회사의 결과를 얻을 수 있도록 데이터베이스를 조회할 수 있습니다.
SELECT
`id`
, `company`
FROM
`db`.`clients`
WHERE
JSON_VALUE(`contracts`, '$.2.cb')=1
그러나 나는 json을 쿼리하고 싶다. 그래서 나는 아이 키 cb = 1인 부모 키 배열을 얻을 수 있다.["2","7"]
이 json의 결과입니다.
따라가는 줄 알았는데 안 되네.기대했던 결과 대신 빈 결과 세트를 얻는 것.
SELECT
`id`
, `company`
, JSON_QUERY(`contracts`, '$') AS `contracttypes`
FROM
`db`.`clients`
WHERE
JSON_VALUE(`contracts`, '$.%.cb')=1
경로에서 와일드카드가 가능한지 여부 및 가능한 경우 구문을 찾을 수 없으므로 원하는 결과를 얻을 수 있습니다.
대체 어프로치
다른 방법을 시도했지만 더 나은 결과를 얻지는 못했습니다.
SELECT
`id`
, `company`
, json_search(`contracts`,'all','1') AS `contracttypes`
FROM
`db`.`clients`
결과:["$.1.p", "$.2.cb", "$.7.cb"]
cb 아이템의 키는 제가 원하는 것이지만, p 아이템으로 인한 첫 번째 키는 원하지 않습니다.
하려고 하다json_search
다음과 같은 값을 가진 키에서 null 결과를 제공합니다.
json_search(`contracts`,'all','"cb":"1"')
/* or with curlies */
json_search(`contracts`,'all','{"cb":"1"}')
시험:
SELECT
REGEXP_REPLACE(
JSON_SEARCH(@`json`, 'all', '1', NULL, '$**.cb'),
'[$.]|[.cb]',
SPACE(0)
) `json_result`;
dbfiddle 참조.
언급URL : https://stackoverflow.com/questions/59987395/mariadb-json-query-to-get-parent-keys-of-specific-child-value
반응형
'programing' 카테고리의 다른 글
Vue.js 구문 오류(SCRIPT1003) IE11 이하 (0) | 2022.09.12 |
---|---|
와, 뭔가 잘못 된 것 같아.라라벨 5.0 (0) | 2022.09.12 |
MySQL 데이터베이스의 모든 테이블에 있는 필드의 텍스트 검색 (0) | 2022.09.12 |
IDEA 10.5 명령줄이 너무 깁니다. (0) | 2022.09.12 |
스태틱 범용 메서드를 호출 (0) | 2022.09.12 |