>  기사  >  데이터 베이스  >  세미콜론으로 구분된 값을 기반으로 MySQL에서 테이블을 조인할 수 있습니까?

세미콜론으로 구분된 값을 기반으로 MySQL에서 테이블을 조인할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-01 00:03:28941검색

Can I Join Tables in MySQL Based on Values Separated by Semicolons?

Pure MySQL로 이 문제를 해결할 수 있나요? (열의 ';' 분리된 값에 조인)

질문:

';'을 기반으로 조인해야 하는 데이터가 여러 테이블에 있습니다. (세미콜론)은 열의 값을 구분합니다. 결과를 조작하기 위해 PHP나 다른 언어를 사용할 수 없습니다. MySQL만 사용하여 이를 달성할 수 있는 방법이 있습니까?

답변:

예, ';'에 가입할 수 있습니다. 순수 MySQL을 사용하여 열의 값을 구분합니다. 아래는 해결 방법에 대한 자세한 설명입니다.

구분된 문자열을 행으로 변환

핵심은 ';' 구분된 문자열을 일련의 행으로 나눕니다. 이는 다음 단계를 사용하여 달성할 수 있습니다.

  1. 구분된 문자열에 1부터 최대 항목 수까지의 숫자를 포함하는 정수 시리즈라는 테이블을 생성합니다.
  2. COUNT_IN_SET 및 VALUE_IN_SET을 사용합니다. 구분된 문자열의 항목 수를 계산하고 위치에 따라 각 항목을 추출하는 함수입니다.
  3. 교차 조인을 사용하여 user_resource 테이블을 정수 시리즈 테이블과 조인합니다. 이렇게 하면 구분된 문자열의 각 항목에 대한 행이 생성됩니다.

User_resource 테이블을 정규화하는 쿼리

<code class="sql">SELECT user_resource.user, 
       user_resource.resources,
       COUNT_IN_SET(user_resource.resources, ';') AS resources_count, 
       isequence.id AS resources_index,
       VALUE_IN_SET(user_resource.resources, ';', isequence.id) AS resources_value
FROM 
     user_resource 
     JOIN  integerseries AS isequence 
       ON  isequence.id <= COUNT_IN_SET(user_resource.resources, ';')
ORDER BY
       user_resource.user, isequence.id</code>

다음을 사용하여 정규화된 테이블 조인 리소스 테이블

user_resource 테이블이 정규화되면 리소스 테이블과 조인하여 원하는 결과를 얻을 수 있습니다.

<code class="sql">SELECT user_resource.user, 
       resource.data

FROM user_resource 
     JOIN integerseries AS isequence 
       ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';')

     JOIN resource 
       ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id)      
ORDER BY
       user_resource.user,  resource.data</code>

샘플 입력 및 출력

user_resource 테이블:

user resources
user1 1;2;4
user2 2
user3 3;4

resource 테이블:

id data
1 data1
2 data2
3 data3
4 data4
5 data5

Normalizeduser_resource 테이블:

user resources resources_count resources_index resources_value
user1 1;2;4 3 1 1
user1 1;2;4 3 2 2
user1 1;2;4 3 3 4
user2 2 1 1 2
user3 3;4 2 1 3
user3 3;4 2 2 4

출력(결합된 결과):

user data
user1 data1
user1 data2
user1 data4
user2 data2

위 내용은 세미콜론으로 구분된 값을 기반으로 MySQL에서 테이블을 조인할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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