Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Câu lệnh cập nhật MySQL chỉ khớp với hàng đầu tiên

Dựa trên cập nhật cho câu hỏi của bạn, bạn có thể làm như thế này

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

Kết quả:

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

Đây là SQLFiddle bản demo

CẬP NHẬT: Dựa trên nhận xét của bạn mà đã thay đổi câu hỏi của bạn một lần nữa. Để có thể cập nhật một chuỗi giá trị được phân tách trong t1 dựa trên các giá trị trong t2 bạn sẽ cần sự trợ giúp của một bảng số (kiểm đếm) để tách t1.value Bạn có thể dễ dàng tạo bảng như thế này

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

Tập lệnh đó tạo ra một bảng với một chuỗi các số từ 1 đến 100 sẽ cho phép phân chia hiệu quả tối đa 100 giá trị được phân tách. Nếu bạn cần nhiều hơn hoặc ít hơn, bạn có thể dễ dàng điều chỉnh tập lệnh.

Bây giờ để cập nhật t1.value bạn có thể làm

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

Giả sử rằng bạn có trong t1

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

kết quả của cập nhật sẽ là

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

Đây là SQLFiddle bản demo

Đó là tất cả những gì đã nói về lâu dài bạn nên xem xét lại giản đồ db và chuẩn hóa dữ liệu của mình tốt hơn . Điều đó sẽ mang lại hiệu quả lớn bằng cách cho phép duy trì và truy vấn dữ liệu của bạn một cách bình thường.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào tồi tệ bằng cách sử dụng SELECT MAX (id) trong MYSQL thay vì mysql_insert_id () trong PHP?

  2. Làm thế nào để kiểm tra ID của người dùng Facebook đã tồn tại trước khi ứng dụng lauching?

  3. Nhóm MySQL theo ID và Ngày giờ mới nhất

  4. Làm cách nào để chỉ gửi sự kiện nhấp chuột (div), khi sử dụng hàm jquery live?

  5. Có thể tham gia bảng như dưới đây trong Laravel không?