MySQL Case错误1111-SP中的Max(Column)Case语句

时间:2019-03-24 15:14:21

标签: mysql case

摘要:我试图将用户名添加到db.username_table中,其唯一ID递增1。但是,我仍然收到与CASE语句相关的错误1111。它应将第一个User_ID设为1,然后将所有其他新用户名设为max(user_id)+1。任何帮助将不胜感激!

背景:这是我的第一个MySQL项目-我在MS SQL方面有一些经验,这可能会阻碍我的工作。我用Google搜索了很多引用,并尽可能简化了代码,但是计数器的汇总返回了带有IF或CASE语句的1111错误。

DELIMITER $$

CREATE PROCEDURE db.add_user
(
in new_username varchar(45)
)
begin

-- Set Counter ID
declare new_user_id int;
set new_user_id = if(max(db.username_table.User_ID) is null, 1, max(db.username_table.User_ID) + 1);

-- Add Username with Counter
insert into db.username_table (user_id, username)
values (new_user_id, new_username);

END$$
DELIMITER ;

预期结果-将用户名添加到db.username_table中,其唯一ID递增1。

实际结果-错误1111。

1 个答案:

答案 0 :(得分:0)

您正在使用功能MAX,但未在SQL语句中使用..,所以使用的max不正确。您需要选择一个以检索MAX(db.username_table.User_ID。)

  declare new_user_id int;
  select case when  
            max(ifnull(db.username_table.User_ID,0)) = 0 
                then 1 
                else max(db.username_table.User_ID) + 1 end 
  INTO new_user_id 
  from your_table ;

但是您是否可以仅需要User_id的自动递增列并避免使用此SP

 CREATE TABLE your_table (
      User_ID  int(11) NOT NULL AUTO_INCREMENT,
      .... 
      )