sql >> Database >  >> RDS >> Mysql

MySQL-update-instructie komt alleen overeen met de eerste rij

Op basis van uw update van uw vraag kunt u het als volgt doen

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

Resultaat:

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

Hier is SQLFiddle demo

UPDATE: Op basis van uw opmerkingen die uw vraag opnieuw hebben gewijzigd. Om een ​​begrensde reeks waarden in t1 te kunnen bijwerken gebaseerd op waarden in t2 je hebt hulp nodig van een getallentabel om t1.value te splitsen on the fly.Je kunt zo'n tabel gemakkelijk als deze maken

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

Dat script maakt een tabel met een reeks getallen van 1 tot 100 waarmee u tot 100 gescheiden waarden effectief kunt splitsen. Als je meer of minder nodig hebt, kun je het script gemakkelijk aanpassen.

Nu t1.value updaten je kunt doen

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

Ervan uitgaande dat u in t1

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

resultaat van de update zal zijn

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

Hier is SQLFiddle demo

Dat alles gezegd zijnde, op de lange termijn je kunt maar beter je db-schema heroverwegen en je gegevens normaliseren . Dat zal zijn vruchten afwerpen door uw gegevens normaal te laten onderhouden en opvragen.



  1. PHP PDO haalt null op

  2. JPA GenerationType.AUTO houdt geen rekening met kolom met automatische verhoging

  3. SQL - Hoe een rij te selecteren met een kolom met maximale waarde

  4. Hoe het maximum van twee waarden in MySQL te krijgen?