2009-04-07 39 views
6

Tôi đã có một truy vấn như thế này:mysql + cập nhật top n

update table 
set  status = 1 
where status = 2;  

nhưng tôi chỉ muốn làm điều này để phía trên 400. Tôi đã thử thêm một 'giới hạn 0, 400' (như Tôi sẽ truy vấn) nhưng điều đó không hiệu quả. Tôi đã làm một số tìm kiếm và mysql dường như không hỗ trợ lệnh TOP (n) như máy chủ sql nào.

Bất kỳ ý tưởng nào tôi sẽ làm điều này?

chỉnh sửa: để tham khảo trong tương lai, tôi đã sử dụng phong cách sau đây để lựa chọn, mà làm việc tốt:

select * 
from table 
where ... limit 0, 400; 

nhưng trong bản cập nhật nó sẽ không làm việc với "0", vì lý do gì. Tôi sẽ xem xét hành vi không nhất quán và mơ hồ này, nhưng ồ.

Trả lời

17
UPDATE table 
SET  status = 1 
WHERE status = 2 
ORDER BY id 
LIMIT 400 

Đã bắt đầu MySQL 5.2.0-falcon-alpha-community-nt-log, xác nhận làm việc.

Trong trường hợp của bạn là 0 trong LIMIT 0, 400 không hoạt động.

Bạn không thể sử dụng giới hạn dưới trong UPDATE 's LIMIT.

2

Hãy thử điều này:

update table 
set  status = 1 
where status = 2 
LIMIT 400 

Bạn cũng có thể đặt một trật tự quy định tại khoản

update table 
set  status = 1 
where status = 2 
ORDER BY id 
LIMIT 400 
+0

Điều này sẽ cập nhật mọi hàng vì dấu chấm phẩy sau 2. không? –

+0

Tôi nghĩ rằng dấu chấm phẩy chỉ được dán nhầm từ truy vấn ban đầu, nó không có điểm ở đây. – Quassnoi

+0

yes thats typo –

Các vấn đề liên quan