>  기사  >  데이터 베이스  >  JSON 필드를 기반으로 MySQL 테이블을 조인하는 방법은 무엇입니까?

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

Patricia Arquette
Patricia Arquette원래의
2024-10-30 16:04:33220검색

How to Join MySQL Tables Based on JSON Fields?

JSON 필드를 사용하여 MySQL 테이블 조인

MySQL에서 JSON 필드로 작업할 때 JSON 필드에 저장된 데이터를 기반으로 테이블을 조인해야 하는 경우가 종종 있습니다. 전지. 기존 키-값 관계를 사용하여 테이블을 조인하는 것은 간단하지만 JSON 필드 콘텐츠를 기반으로 조인을 수행하면 추가 문제가 발생할 수 있습니다.

일반적인 시나리오 중 하나는 테이블 내의 JSON 필드에 ID 목록을 저장하는 것입니다(이 방법은 최적의 성능과 데이터 무결성을 위해서는 권장되지 않습니다. 이 상황에 접근하는 방법을 설명하기 위해 간단한 예를 살펴보겠습니다.

<code class="sql">CREATE TABLE user (
    user_id INT,
    user_name VARCHAR(50),
    user_groups JSON
);

CREATE TABLE user_group (
    user_group_id INT,
    group_name VARCHAR(50)
);

INSERT INTO user_group (user_group_id, group_name) VALUES (1, 'Group A');
INSERT INTO user_group (user_group_id, group_name) VALUES (2, 'Group B');
INSERT INTO user_group (user_group_id, group_name) VALUES (3, 'Group C');

INSERT INTO user (user_id, user_name, user_groups) VALUES (101, 'John', '[1,3]');</code>

여기에는 그룹 ID 목록을 저장하는 user_groups라는 JSON 필드가 있는 사용자 테이블이 있습니다. 우리의 목표는 다음 결과를 반환하는 쿼리를 만드는 것입니다.

user_id | user_name | user_group_id | group_name|
-------------------------------------------------
101     | John      | 1             | Group A
101     | John      | 3             | Group C

이를 달성하기 위해 JSON_CONTAINS() 함수를 활용하여 JSON 문서에 특정 값이 포함되어 있는지 확인할 수 있습니다. 이 함수를 사용하면 다음과 같이 user 및 user_group 테이블을 조인할 수 있습니다.

<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>

이 쿼리는 본질적으로 user_groups 필드의 요소를 반복하고 user_group 테이블에 있는 그룹의 user_group_id와 일치하는지 확인합니다. 일치하는 항목이 발견되면 user_group 테이블의 해당 데이터가 반환됩니다.

JSON_CONTAINS()를 사용하면 JSON 필드에 저장된 데이터를 기반으로 조인을 효율적으로 수행할 수 있으므로 복잡한 데이터에 액세스하고 조작할 수 있습니다. 편리하고 유연한 방식으로 구조를 구축합니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.