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

Lỗi cú pháp WHILE trong MySQL

Có vẻ như bạn đang cố gắng chạy mã thủ tục này dưới dạng một khối ẩn danh. Mặc dù điều này hoạt động trong một số cơ sở dữ liệu (như Oracle) nhưng không thể thực hiện được trong MySQL.

Nếu bạn muốn chạy nó, hãy đặt nó vào một thủ tục được lưu trữ và sau đó gọi thủ tục. Do đó:

Tạo thủ tục

DELIMITER $$

CREATE PROCEDURE `foo_update_routine`()
BEGIN
  WHILE ((SELECT COUNT(*) FROM 
    (SELECT id, COUNT(*) AS cnt
      FROM foo
      GROUP BY id
      ORDER BY COUNT(*) DESC
    ) cnts
    WHERE cnt > 1) != 0) 
  DO
    SET @curr_id = (SELECT id FROM 
      (SELECT id, COUNT(*) AS cnt
         FROM foo
         GROUP BY id
         ORDER BY COUNT(*) DESC
      ) cnts
      WHERE cnt > 1
      LIMIT 1);

    SET @new_id = (SELECT MAX(id) + 1 FROM foo);

    UPDATE foo SET id = @new_id 
      WHERE id = @curr_id 
      LIMIT 1;

  END WHILE;
END $$

Quy trình cuộc gọi

CALL `foo_update_routine`;

PS Bạn có thể muốn điều tra điều khoản HAVING cho các câu lệnh đã chọn của bạn ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dữ liệu từ cơ sở dữ liệu không xuất hiện trong bảng trên trang web HTML

  2. đối tượng java.sql.Time bị nhầm lẫn với đối tượng java.sql.Date

  3. Cách nhận NGÀY TỐI ĐA thứ hai trong MYSQL

  4. quyền root mysql để cập nhật lỗi information_schema

  5. Cách tính số người dùng hoạt động hàng ngày (DAU) trong MySQL