> 데이터 베이스 > MySQL 튜토리얼 > MySQL의 GROUP_CONCAT을 되돌리는 방법: 연결된 문자열을 개별 값으로 분할합니까?

MySQL의 GROUP_CONCAT을 되돌리는 방법: 연결된 문자열을 개별 값으로 분할합니까?

Barbara Streisand
풀어 주다: 2024-12-16 22:05:14
원래의
533명이 탐색했습니다.

How to Reverse MySQL's GROUP_CONCAT: Splitting a Concatenated String into Individual Values?

MySQL에서 GROUP_CONCAT 역의 수수께끼 풀기

데이터 조작 영역에서 GROUP_CONCAT 함수는 여러 값을 하나의 값으로 연결하는 데 최고의 역할을 합니다. 단일 문자열. 그러나 연결된 문자열을 개별 값으로 분할하는 역연산은 문제가 됩니다.

당면한 문제

"colors" 테이블이 있는 시나리오를 생각해 보세요. " 데이터 구조는 다음과 같습니다.

+----+----------------------+
| id | colors               |
+----+----------------------+
| 1  | Red,Green,Blue       |
| 2  | Orangered,Periwinkle |
+----+----------------------+
로그인 후 복사

귀하의 목표는 이 데이터를 보다 세부적인 데이터로 변환하는 것입니다. 형식:

+----+------------+
| id | colors     |
+----+------------+
| 1  | Red        |
| 1  | Green      |
| 1  | Blue       |
| 2  | Orangered  |
| 2  | Periwinkle |
+----+------------+
로그인 후 복사

해결책: SQL의 심층 분석

이러한 데이터 변형을 달성하려면 SUBSTRING_INDEX 함수의 기능을 활용할 수 있습니다. 이 다용도 기능을 사용하면 구분 기호를 기반으로 특정 하위 문자열을 추출할 수 있습니다.

SELECT
  id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) color
FROM
  colors
  INNER JOIN
  (SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) n
  ON LENGTH(REPLACE(colors, ',' , '')) <= LENGTH(colors)-n.digit
ORDER BY
  id,
  n.digit
로그인 후 복사

쿼리 이면의 메커니즘 공개

외부 쿼리는 "id" 열을 선택하고 원하는 하위 문자열을 분리하기 위해 두 번 중첩된 SUBSTRING_INDEX 함수를 사용합니다. SUBSTRING_INDEX를 처음 호출하면 (n.digit 1)번째 쉼표까지 하위 문자열을 추출하고, 두 번째 호출에서는 (n.digit 1)번째 쉼표부터 문자열 끝까지 부분 문자열을 추출합니다.

하위 쿼리가 포함된 INNER JOIN은 SUBSTRING_INDEX 함수가 "숫자" 열에 정의된 대로 최대 4개의 하위 문자열에 적용되도록 보장합니다. 하위 쿼리에서. 더 많은 하위 문자열을 지원하려면 그에 따라 하위 쿼리를 조정하세요.

마지막으로 ORDER BY 절은 "id"를 기준으로 한 다음 각 행에 대한 하위 문자열의 숫자 순서를 기준으로 결과를 정렬합니다.

데모 및 크레딧

실제 데모를 보려면 참조에 링크된 바이올린을 방문하세요. 제공됩니다.

참조

[쉼표로 구분된 목록에서 여러 값 추출](https://www.data-generator.com/fiddle/d3c78f201137b4b56a63a95332b8106b)

위 내용은 MySQL의 GROUP_CONCAT을 되돌리는 방법: 연결된 문자열을 개별 값으로 분할합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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