Mysql
 sql >> база данни >  >> RDS >> Mysql

Изявлението за актуализиране на MySQL съответства само на първия ред

Въз основа на вашата актуализация на вашия въпрос можете да го направите по този начин

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
 

Резултат:

+------+-------+| ID | стойност |+------+-------+| 1 | 1,2,3 |+------+-------+

Ето го SQLFiddle демонстрация

АКТУАЛИЗАЦИЯ: Въз основа на вашите коментари, които отново промениха въпроса ви. За да можете да актуализирате ограничен низ от стойности в t1 въз основа на стойности в t2 ще ви е необходима помощ от таблица с числа (сбор), за да разделите t1.value в движение. Можете лесно да създадете такава таблица като тази

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
 

Този скрипт създава таблица с поредица от числа от 1 до 100, което ще позволи ефективно разделяне на до 100 разделени стойности. Ако имате нужда от повече или по-малко, можете лесно да коригирате скрипта.

Сега да актуализирате t1.value можете да направите

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
 

Ако приемем, че имате в t1

<преди>| ID | СТОЙНОСТ ||----|-------|| 1 | 1,4 |

резултатът от актуализацията ще бъде

<преди>| ID | СТОЙНОСТ ||----|---------|| 1 | 1,2,3,4 |

Ето го SQLFiddle демонстрация

Всичко казано в дългосрочен план по-добре преразгледайте своята схема на база данни и нормализирайте данните си . Това ще ви изплати много време, като позволи нормално поддържане и запитване към вашите данни.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предупреждение:mysqli_connect():(HY000/1049):Неизвестна база данни само в mac терминал

  2. В Apache Spark 2.0.0 възможно ли е да се извлече заявка от външна база данни (вместо да вземете цялата таблица)?

  3. MYSQL + PHP за показване на данни от два реда като една колона

  4. Как да доведа резултат от повече от един ред (mysql) в една и съща променлива, когато изпълнявате json_encode?

  5. Ruby sort_by за масиви, върнати от MySQL, дата, форматирана като низ