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