>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 쉼표로 구분된 목록을 효율적으로 분할하는 방법은 무엇입니까?

MySQL에서 쉼표로 구분된 목록을 효율적으로 분할하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-06 11:36:40514검색

How to Split Comma-Separated Lists in MySQL Efficiently?

MySQL에서 쉼표로 구분된 목록 분할

쉼표로 구분된 목록으로 정규화되지 않은 데이터를 처리하려면 두 가지 접근 방식이 있습니다. 새로운 테이블.

참여 접근 방식:

  1. 쉼표로 구분된 목록의 고유 값을 포함하는 임시 테이블을 만듭니다.
CREATE TEMP TABLE UNIQUE_MATERIALS AS
SELECT DISTINCT TRIM(MATERIAL) AS MATERIAL FROM PART_TABLE;
  1. 원래 테이블을 목록을 확장하기 위한 MATERIAL 열의 임시 테이블 행:
SELECT p.part_id, m.material_id
FROM PART_TABLE p
JOIN UNIQUE_MATERIALS m ON p.MATERIAL LIKE CONCAT('%', m.MATERIAL, '%');

삽입 방법:

  1. 새 테이블에 새 행을 삽입하려면 REPLACE 명령을 사용하세요. (SPLIT_MATERIALS):
CREATE TABLE SPLIT_MATERIALS (part_id INT, material_id INT);
INSERT INTO SPLIT_MATERIALS (part_id, material_id)
VALUES
  (339, 1),
  (339, 2),
  (970, 2);
  1. 쉼표로 구분된 각 값을 반복하고 행을 삽입하여 새 테이블을 채웁니다.
INSERT INTO SPLIT_MATERIALS (part_id, material_id)
SELECT part_id, STR_TO_INT(TRIM(SUBSTR(MATERIAL, pos - 1, INSTR(MATERIAL, ',', pos) - pos + 1)))
FROM PART_TABLE,
  (SELECT @pos := 1) AS vars,
  (SELECT INSTR(MATERIAL, ',')) AS tmp
WHERE STR_TO_INT(SUBSTR(MATERIAL, @pos - 1, INSTR(MATERIAL, ',', @pos) - @pos + 1)) IS NOT NULL
  AND INSTR(MATERIAL, ',', @pos) > 0
GROUP BY part_id, STR_TO_INT(SUBSTR(MATERIAL, @pos - 1, INSTR(MATERIAL, ',', @pos) - @pos + 1))
ORDER BY part_id, SUBSTR(MATERIAL, @pos - 1, INSTR(MATERIAL, ',', @pos) - @pos + 1);

한 번 새 테이블이 채워지면 분리가 필요한 쿼리를 위해 원래 테이블과 조인될 수 있습니다. 가치가 있습니다.

위 내용은 MySQL에서 쉼표로 구분된 목록을 효율적으로 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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