Estoy actualizando una TableA de otra TableB con este script MySQL:

UPDATE TableA
JOIN TableB ON TableB.misc = TableA.id
SET TableA.fieldname = TableB.fieldname;

TableB puede tener muchas filas donde podemos encontrar TableB.misc = TableA.id, así que necesito incluir esta fila de valores en el TableA.fieldname con una coma separada:

Tabla B:

+------+-----------+
| misc | fieldname |
+------+-----------+
|   1  |    123    |
+------+-----------+
|   1  |    456    |
+------+-----------+
|   1  |    789    |
+------+-----------+

Resultado necesario en la Tabla A:

+---------+----------------+
|   id    |    fieldname   |
+------+-------------------+
|    1    |   123,456,789  |
+---------+----------------+
1
MAZ 21 feb. 2020 a las 13:46

2 respuestas

La mejor respuesta

Entonces debes agruparlo antes de unirte:

UPDATE TableA
JOIN (
    SELECT misc, GROUP_CONCAT(fieldname) grouped_fieldname
    FROM TableB GROUP BY misc) TableB ON TableB.misc = TableA.id
SET TableA.fieldname = TableB.grouped_fieldname;
3
Nae 21 feb. 2020 a las 10:49

Use GROUP_CONCAT, y use una conversión explícita en el campo numérico que se agregará (si es numérico):

INSERT INTO TableA (id, fieldname)
SELECT misc, GROUP_CONCAT(CAST(fieldname AS CHAR(50)) ORDER BY fieldname)
FROM TableB
GROUP BY misc;

Editar:

En realidad, no sé si ya existen datos en la tabla A. Incluso si lo hace, podría ser más rápido simplemente truncar esa tabla y ejecutar el inserto que estoy sugiriendo.

2
Tim Biegeleisen 21 feb. 2020 a las 10:59