sql >> Base de Datos >  >> RDS >> Mysql

La declaración de actualización de MySQL coincide solo con la primera fila

Según la actualización de su pregunta, puede hacerlo así

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

Resultado:

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

Aquí está SQLFiddle demostración

ACTUALIZACIÓN: Basado en sus comentarios que cambiaron su pregunta nuevamente. Para poder actualizar una cadena delimitada de valores en t1 basado en valores en t2 necesitará la ayuda de una tabla de números (recuento) para dividir t1.value sobre la marcha. Puede crear fácilmente una tabla como esta

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

Ese script crea una tabla con una secuencia de números del 1 al 100 que permitirá dividir efectivamente hasta 100 valores delimitados. Si necesita más o menos, puede ajustar fácilmente el guión.

Ahora para actualizar t1.value puedes hacer

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

Asumiendo que tienes en t1

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

el resultado de la actualización será

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

Aquí está SQLFiddle demostración

Dicho todo esto, a la larga es mejor que reconsideres tu esquema de base de datos y normalices tus datos . Eso valdrá la pena al permitirle mantener y consultar sus datos normalmente.