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

MYSQL - cách cập nhật một trường cho tất cả các mục do nhóm theo câu lệnh select

Ý của bạn là bạn muốn cập nhật bảng trong đó field1, field2 và field3 nằm trong tập hợp được trả về bởi câu lệnh select của bạn?

ví dụ.

update table, 
     ( select field1, field2, field3 
       FROM table WHERE field1= 5  AND field_flag =1 
       GROUP BY field1, field2, field3 limit 1000 ) temp
set table.field_flag = 99 
where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3

Lưu ý rằng bản cập nhật có thể cập nhật nhiều hơn 1000 hàng.

Một bảng tạm thời cũng có thể được sử dụng:

create temporary table temptab as
select field1, field2, field3 
FROM table WHERE field1= 5  AND field_flag =1 
GROUP BY field1, field2, field3 limit 1000 

 update table, 
        temptab temp
 set table.field_flag = 99 
 where table.field1=temp.field1 and table.field2=temp.field2 and table.field3 = temp.field3

Điều này có lợi thế là sau này có thể sử dụng cám dỗ và các chỉ mục cũng có thể được thêm vào để tăng tốc cập nhật:

create index on temptab (field1, field2, field3);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có công thức nào để ước tính kích thước chỉ mục trong InnoDB không?

  2. Lấy tất cả các hàng cha trong một truy vấn SQL

  3. Dữ liệu không được gửi đến Cơ sở dữ liệu SQL bằng MySQLi và PHP

  4. Truy vấn Mysql sử dụng mệnh đề where và group theo

  5. SQL nối 2 bảng thành 1 bảng