Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die MySQL-Update-Anweisung stimmt nur mit der ersten Zeile überein

Basierend auf Ihrer Aktualisierung Ihrer Frage können Sie dies folgendermaßen tun

UPDATE t1 JOIN
(
  SELECT id, GROUP_CONCAT(DISTINCT value ORDER BY value) value
    FROM t2
   GROUP BY id
) q
    ON t1.id = q.id
   SET t1.value = q.value

Ergebnis:

+------+-------+
| id   | value |
+------+-------+
|    1 | 1,2,3 |
+------+-------+

Hier ist SQLFiddle Demo

AKTUALISIERUNG: Basierend auf Ihren Kommentaren, die Ihre Frage erneut geändert haben. Um eine begrenzte Zeichenfolge von Werten in t1 aktualisieren zu können basierend auf Werten in t2 Sie benötigen Hilfe einer Zahlentabelle, um t1.value aufzuteilen on the fly. Sie können ganz einfach eine solche Tabelle wie diese erstellen

CREATE TABLE tally(n INT NOT NULL PRIMARY KEY);

INSERT INTO tally (n)
SELECT a.N + b.N * 10 + 1 n
 FROM 
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n

Dieses Skript erstellt eine Tabelle mit einer Zahlenfolge von 1 bis 100, die es ermöglicht, bis zu 100 getrennte Werte effektiv aufzuteilen. Wenn Sie mehr oder weniger benötigen, können Sie das Skript einfach anpassen.

Aktualisieren Sie nun t1.value du kannst

UPDATE t1 JOIN
(
  SELECT id, GROUP_CONCAT(value ORDER BY value) value
    FROM
  (
    SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(t1.value, ',', n.n), ',', -1) value
      FROM t1 CROSS JOIN tally n
     WHERE n.n <= 1 + (LENGTH(t1.value) - LENGTH(REPLACE(t1.value, ',', '')))
     UNION
    SELECT id, value
      FROM t2
  ) v
   GROUP BY id
) q
    ON t1.id = q.id
   SET t1.value = q.value

Angenommen, Sie haben in t1

| ID | VALUE |
|----|-------|
|  1 |   1,4 |

Das Ergebnis des Updates wird sein

| ID |   VALUE |
|----|---------|
|  1 | 1,2,3,4 |

Hier ist SQLFiddle Demo

Alles in allem sollten Sie auf lange Sicht Ihr DB-Schema überdenken und Ihre Daten normalisieren . Das wird sich sehr auszahlen, da Sie Ihre Daten normal pflegen und abfragen können.