JSON 필드에 저장된 ID를 기반으로 MySQL 테이블을 조인하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-29 13:04:29
원래의
651명이 탐색했습니다.

How to Join MySQL Tables Based on IDs Stored in a JSON Field?

테이블 조인을 위해 MySQL JSON 필드 사용

JSON 필드에 데이터를 저장하면 유연성이 제공될 수 있지만 데이터 작업을 수행할 때 문제가 발생하기도 합니다. . 이 문의의 목표는 ID 배열을 저장하는 JSON 필드를 사용하여 테이블을 조인하는 것입니다.

문제 설명

사용자가 두 개의 테이블을 생성했습니다. user_group, 그리고 사용자 테이블 내의 가상 user_groups JSON 필드를 사용하여 ID 목록을 저장합니다. 사용자는 이 JSON 필드에 대해 작업을 수행하고 이를 SQL에서 사용하려고 합니다.

구체적으로 사용자는 사용자 ID, 사용자 이름, 사용자 그룹 ID 및 그룹 이름이 나열된 결과를 얻으려고 합니다. 이러한 결과는 JSON 필드에 저장된 ID를 기반으로 조인되어야 합니다.

해결책

이를 달성하기 위해 사용자는 JSON_CONTAINS 함수를 활용할 수 있습니다. JSON 문서에 특정 값이나 하위 쿼리가 포함되어 있는지 확인할 수 있는 기능입니다.

코드

<code class="sql">SELECT 
       u.user_id, 
       u.user_name, 
       g.user_group_id,
       g.group_name
   FROM user u
   LEFT JOIN user_group g on JSON_CONTAINS(u.user_groups, CAST(g.user_group_id as JSON), '$')</code>
로그인 후 복사

설명

  • JSON_CONTAINS 함수는 사용자 테이블의 각 행에 있는 user_groups JSON 필드에 user_group 테이블의 해당 user_group_id가 포함되어 있는지 확인합니다. $를 사용하여 JSON 문서의 최상위 개체를 나타냅니다.
  • CAST 표현식은 user_group_id를 JSON 필드와 비교하기 전에 JSON 문자열로 변환합니다.
  • 비교 결과 user와 user_group 테이블 사이에 왼쪽 조인을 수행하는 데 사용되어 일치하는 그룹이 없더라도 모든 사용자 행이 포함되도록 합니다.
  • 그런 다음 쿼리는 user_id, user_name, user_group_id 등 원하는 열을 선택합니다. 및 group_name.

대체 솔루션

사용자가 원하는 경우 JSON_TABLE 함수를 사용하여 JSON 필드에서 ID 배열을 추출하고 생성할 수도 있습니다. 가상 테이블. 이 접근 방식을 사용하면 데이터를 더 유연하게 조작할 수 있습니다.

코드

<code class="sql">SELECT 
       u.user_id, 
       u.user_name, 
       uv.user_group_id
       (
           SELECT 
               g.group_name
           FROM user_group g
           WHERE g.user_group_id = uv.user_group_id
       ) AS group_name
   FROM user u
   CROSS JOIN JSON_TABLE(
       u.user_groups,
       '$[*]' COLUMNS (user_group_id INT PATH '$')
   ) uv</code>
로그인 후 복사

설명

  • JSON_TABLE 함수는 user_groups JSON 필드에서 가상 테이블 uv를 생성합니다.
  • CROSS JOIN 절은 사용자 테이블의 각 행이 가상 테이블의 모든 행과 연결되도록 보장합니다.
  • 중첩 하위 쿼리 uv 가상 테이블의 각 user_group_id에 대한 group_name을 검색합니다.

이러한 기술을 활용하면 사용자는 JSON 필드를 효과적으로 활용하여 MySQL에서 테이블 조인과 복잡한 데이터 작업을 수행할 수 있습니다.

위 내용은 JSON 필드에 저장된 ID를 기반으로 MySQL 테이블을 조인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿