Mysql
 sql >> Database >  >> RDS >> Mysql

L'istruzione di aggiornamento MySQL corrisponde solo alla prima riga

In base all'aggiornamento della tua domanda, puoi farlo in questo modo

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

Risultato:

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

Ecco SQLFiddle demo

AGGIORNAMENTO: Sulla base dei tuoi commenti che hanno cambiato di nuovo la tua domanda. Per poter aggiornare una stringa delimitata di valori in t1 in base ai valori in t2 avrai bisogno dell'aiuto di una tabella di numeri (di conteggio) per dividere t1.value al volo. Puoi facilmente creare una tabella come questa

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

Quello script crea una tabella con una sequenza di numeri da 1 a 100 che consentirà di dividere efficacemente fino a 100 valori delimitati. Se hai bisogno di più o meno puoi facilmente modificare lo script.

Ora per aggiornare t1.value puoi fare

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

Supponendo che tu abbia in t1

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

l'esito dell'aggiornamento sarà

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

Ecco SQLFiddle demo

Detto questo, a lungo termine è meglio che riconsideri il tuo schema db e normalizzi i tuoi dati . Ciò ti ripagherà molto consentendo di mantenere e interrogare normalmente i tuoi dati.