source

MySQL의 개체 배열을 사용하여 JSON 열 쿼리 열

factcode 2023. 10. 16. 22:06
반응형

MySQL의 개체 배열을 사용하여 JSON 열 쿼리 열

다음 배열의 json 열이 있습니다.

[
  {
    "id": "24276e4b-de81-4c2c-84e7-eed9c3582a31",
    "key": "id",
    "type": "input",
  },
  {
    "id": "e0ca5aa1-359f-4460-80ad-70445be49644",
    "key": "name",
    "type": "textarea",
    }
]

ID가 있는 행을 가져오기 위해 다음 쿼리를 시도했습니다.24276e4b-de81-4c2c-84e7-eed9c3582a31문서 열에는 있지만 결과는 반환되지 않습니다.

select * from jobs WHERE document->'$[*].id' = "24276e4b-de81-4c2c-84e7-eed9c3582a31"

올바른 쿼리 방법 아는 사람?

mysql 5.7을 사용하므로 JSON_CONTAINES는 다음과 같이 쉽게 사용할 수 있습니다.

SELECT JSON_CONTAINS(
                '[{"id": "24av","name": "she"},{"id": "e0c2", "name": "another_she"}]', 
                JSON_OBJECT('id', "e0c2")
                );

다음과 같이 시도합니다.

SELECT * FROM jobs WHERE document->'$[*].id' = json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31");

저는 효과가 있지만, 아래 방법이 더 낫다고 생각합니다.

SELECT * FROM jobs WHERE json_contains(document->'$[*].id', json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31"));

사실 그건 쉬워요. 그냥 반품 값이.JSON_TYPE그러나 끈이나 다른 것은 아닙니다.

혹시 이거?@바마르

SELECT * FROM jobs WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id') IS NOT NULL;

사용할때document->'$[*].id'모든 ID 속성의 쉼표로 구분된 목록을 반환합니다.이것은 단지 하나의 ID 문자열의 값과 동일하지 않을 것입니다, 만약 오직 하나의 객체가 있지 않다면.document기둥.

사용하셔야 합니다.JSON_SEARCH()JSON 값 내에서 일치하는 요소를 검색합니다.

SELECT * 
FROM jobs 
WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id');

언급URL : https://stackoverflow.com/questions/38797627/query-a-json-column-with-an-array-of-object-in-mysql

반응형