P粉8271215582023-08-28 13:36:44
JSON으로 비정규화하는 것이 좋은 생각이 아닌 것은 사실이지만 JSON 데이터를 처리해야 할 때도 있고, 쿼리에서 JSON 배열을 행으로 추출하는 방법도 있습니다.
비결은 임시 또는 인라인 인덱스 테이블에서 조인을 수행하여 JSON 배열의 null이 아닌 각 값에 대한 행을 제공하는 것입니다. 즉, 값이 0, 1, 2인 테이블이 있고 이를 두 개의 항목이 포함된 JSON 배열 "fish"에 조인하면 Fish[0]은 0과 일치하여 행을 생성하고 Fish 1은 1과 일치하고 두 번째 행이 생성되지만 fish[2]는 null이므로 2와 일치하지 않으며 조인에서 행이 생성되지 않습니다. JSON 데이터에 있는 배열의 최대 길이만큼 인덱스 테이블에 많은 숫자가 필요합니다. 이것은 약간의 해킹이고 OP의 예만큼 고통스럽지만 매우 편리합니다.
예(MySQL 5.7.8 이상 필요):
으아악결과는 다음과 같습니다.
으아악MySQL 팀은 이 작업을 더 쉽게 하기 위해 MySQL 8에 (MySQL 团队已经添加了JSON_TABLE
함수를 추가할 수도 있습니다. (http://mysqlserverteam.com/mysql-8-0-labs -json-aggregation-functions/JSON_TABLE
函数,以使这一切变得更容易。 (http://mysqlserverteam.com/mysql-8-0-labs -json-aggregation-functions/)JSON_TABLE
) (MySQL 팀은 JSON_TABLE
함수.)
P粉4038048442023-08-28 09:32:06
MySQL 8+에서 JSON_TABLE을 사용하는 방법은 다음과 같습니다.
으아악구분된 문자열을 JSON 문자열로 변환하여 MySQL에 없는 범용 문자열 분할 함수(PG의 regexp_split_to_table 또는 MSSQL의 STRING_SPLIT와 유사)로 사용할 수도 있습니다.
으아악