Heim >Datenbank >MySQL-Tutorial >Wie teilt man durch Kommas getrennte Listen in MySQL effizient auf?

Wie teilt man durch Kommas getrennte Listen in MySQL effizient auf?

Susan Sarandon
Susan SarandonOriginal
2025-01-06 11:36:40514Durchsuche

How to Split Comma-Separated Lists in MySQL Efficiently?

Aufteilen von durch Kommas getrennten Listen in MySQL

Um nicht normalisierte Daten mit durch Kommas getrennten Listen zu verarbeiten, gibt es zwei Ansätze: Verbinden oder Einfügen in ein neuer Tisch.

Mitmachen Vorgehensweise:

  1. Erstellen Sie eine temporäre Tabelle mit den eindeutigen Werten aus der durch Kommas getrennten Liste:
CREATE TEMP TABLE UNIQUE_MATERIALS AS
SELECT DISTINCT TRIM(MATERIAL) AS MATERIAL FROM PART_TABLE;
  1. Verknüpfen Sie die Originaltabelle mit dem temporäre Tabelle in der Spalte MATERIAL, in die die Liste erweitert werden soll Zeilen:
SELECT p.part_id, m.material_id
FROM PART_TABLE p
JOIN UNIQUE_MATERIALS m ON p.MATERIAL LIKE CONCAT('%', m.MATERIAL, '%');

Einfügeansatz:

  1. Verwenden Sie den REPLACE-Befehl, um neue Zeilen in eine neue Tabelle (SPLIT_MATERIALS) einzufügen:
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. Füllen Sie die neue Tabelle durch Iteration jeden durch Kommas getrennten Wert und Einfügen einer Zeile:
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);

Sobald die neue Tabelle gefüllt ist, kann sie für Abfragen, die die getrennten Werte erfordern, mit der Originaltabelle verknüpft werden.

Das obige ist der detaillierte Inhalt vonWie teilt man durch Kommas getrennte Listen in MySQL effizient auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn