sql >> Databáze >  >> RDS >> Mysql

Příkaz aktualizace MySQL odpovídá pouze prvnímu řádku

Na základě aktualizace vaší otázky to můžete udělat takto

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

Výsledek:

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

Zde je SQLFiddle demo

AKTUALIZACE: Na základě vašich komentářů, které znovu změnily vaši otázku. Aby bylo možné aktualizovat řetězec hodnot s oddělovači v t1 na základě hodnot v t2 k rozdělení t1.value budete potřebovat pomoc s číselnou (sčítací) tabulkou za běhu.Takovou tabulku můžete snadno vytvořit

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

Tento skript vytvoří tabulku s posloupností čísel od 1 do 100, která umožní efektivně rozdělit až 100 oddělených hodnot. Pokud potřebujete více či méně, můžete skript snadno upravit.

Nyní aktualizujte t1.value můžete udělat

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

Za předpokladu, že máte v t1

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

výsledkem aktualizace bude

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

Zde je SQLFiddle demo

To vše z dlouhodobého hlediska raději přehodnoťte své schéma databáze a normalizujte svá data . To se vám hodně vyplatí, protože umožníte běžnou údržbu a dotazování vašich dat.



  1. Jak propojit sql server s php pomocí xampp?

  2. Jak se připojím k serveru mysql pomocí ovladače Go and go-sql-driver?

  3. mysql vyberte skupinu součtu podle data

  4. Jak optimalizovat indexy mysql tak, aby operace INSERT probíhaly rychle na velké tabulce s častým zápisem a čtením?