Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A instrução de atualização do MySQL corresponde apenas à primeira linha


Com base na atualização da sua pergunta, você pode fazer assim
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 |
+------+-------+

Aqui está SQLFiddle demonstração

ATUALIZAÇÃO: Com base em seus comentários, que mudaram sua pergunta novamente. Para poder atualizar uma string delimitada de valores em t1 com base em valores em t2 você precisará da ajuda de uma tabela de números (tally) para dividir t1.value em tempo real. Você pode criar facilmente essa tabela 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

Esse script cria uma tabela com uma sequência de números de 1 a 100 que permitirá dividir efetivamente até 100 valores delimitados. Se você precisar de mais ou menos, pode ajustar facilmente o script.

Agora para atualizar t1.value você pode fazer
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

Supondo que você tenha em t1
| ID | VALUE |
|----|-------|
|  1 |   1,4 |

resultado da atualização será
| ID |   VALUE |
|----|---------|
|  1 | 1,2,3,4 |

Aqui está SQLFiddle demonstração

Tudo isso dito a longo prazo é melhor você reconsiderar seu esquema de banco de dados e normalizar seus dados . Isso valerá a pena, permitindo manter e consultar normalmente seus dados.