Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pernyataan pembaruan MySQL hanya cocok dengan baris pertama

Berdasarkan pembaruan Anda untuk pertanyaan Anda, Anda dapat melakukannya seperti ini

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

Hasil:

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

Ini SQLFiddle demo

PERBARUI: Berdasarkan komentar Anda yang mengubah pertanyaan Anda lagi. Untuk dapat memperbarui string nilai yang dibatasi di t1 berdasarkan nilai dalam t2 Anda memerlukan bantuan tabel angka (penghitungan) untuk membagi t1.value dengan cepat. Anda dapat dengan mudah membuat tabel seperti ini

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

Skrip itu membuat tabel dengan urutan angka dari 1 hingga 100 yang akan memungkinkan untuk secara efektif membagi hingga 100 nilai yang dibatasi. Jika Anda membutuhkan lebih atau kurang, Anda dapat dengan mudah menyesuaikan skrip.

Sekarang untuk memperbarui t1.value kamu bisa

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

Dengan asumsi Anda memiliki t1

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

hasil pembaruan adalah

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

Ini SQLFiddle demo

Itu semua dikatakan dalam jangka panjang sebaiknya Anda mempertimbangkan kembali skema db Anda dan menormalkan data Anda . Itu akan menghasilkan banyak waktu dengan mengizinkan pemeliharaan dan kueri data Anda secara normal.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Node MySQL mengeksekusi beberapa kueri secepat mungkin

  2. Menyimpan catatan database ke dalam array

  3. Pilih tanggal dari db saya tanpa detik menggunakan PHP MySql

  4. Cara Menginstal MySQL dengan phpMyAdmin di Ubuntu 12.04

  5. Kasus permintaan regex MySQL tidak sensitif