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 중국어 웹사이트의 기타 관련 기사를 참조하세요!