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

cập nhật hàng mà không xóa các giá trị trước đó trong mysql

Bạn có thể không nối nó vào, thay vì cố gắng tách nó ra trước được không?

UPDATE users_group 
SET user_ids = CONCAT_WS(',', user_ids, '5' ) 
WHERE group_id =1

Nhưng điều này cho thấy một thiết kế cơ sở dữ liệu được chuẩn hóa kém. Nói chung, thay vào đó, một danh sách được phân tách bằng dấu phẩy nên được lưu trữ dưới dạng các hàng trên một bảng khác (tức là một hàng cho mỗi giá trị trong danh sách) theo đề xuất của Mark Baker.

CHỈNH SỬA - Nếu bạn chỉ muốn có một bản sao duy nhất của bất kỳ id nào trong mỗi trường user_ids, bất kể bạn cố chèn nó bao nhiêu lần và bạn muốn có thể thêm nhiều id cùng một lúc:-

UPDATE users_group a
INNER JOIN
(
    SELECT 3 AS an_id
    UNION 
    SELECT 4
) b
ON FIND_IN_SET(b.an_id, a.user_ids) = 0
SET a.user_ids = CONCAT_WS(',', a.user_ids, b.an_id ) 
WHERE a.group_id =1

CHỈNH SỬA lại - nếu bạn có một bảng người dùng chứa id thì bạn có thể chọn id từ đó mà id là một trong những id bạn muốn thêm.

Một cái gì đó như thế này.

UPDATE users_group a
INNER JOIN
(
    SELECT id
    FROM users
    WHERE id IN (3, 4)
) b
ON FIND_IN_SET(b.id, a.user_ids) = 0
SET a.user_ids = CONCAT_WS(',', a.user_ids, b.id ) 
WHERE a.group_id =1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql xóa từ cụ thể trong chuỗi được phân tách bằng dấu phẩy

  2. Kỹ thuật Pure-SQL để đánh số tự động các hàng trong tập kết quả

  3. MySQL Visual Studio Không thể tạo cửa sổ thiết kế cho đối tượng đã chọn

  4. MySQL tham gia các bảng trong đó tên bảng là một trường của một bảng khác

  5. Làm cách nào để in truy vấn sql chính xác trong khung công tác zend?