繁体   English   中英

SQL | 插入+选择+有条件的变量?

[英]SQL | insert into + select + variables with condition?

我的任务是从另一个表的每个ID插入3个随机数据
我在语法上犯了一个错误

set @num := 0, @type := '' ,@stat :='';
INSERT INTO random 
as 
(
SELECT
*
FROM (
select userID,userNAME, chaID, chaNAME,goal,gender,
      @num := if(@type = userID, @num +1,1) as row_number,
      @type := userID as dummy,
      @stat as status
  from userchar
  order by userID
) as x where x.row_number <= 3)

我将这段代码放在事件计划程序中,以每天插入新数据

1064-您的SQL语法有误; 检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在第2行的'INSERT INTO random as(SELECT * FROM(select userID,userNAME,chaID,c')附近使用

非常感谢您的所有建议。

我怀疑问题是试图同时运行多个语句。 您可以通过初始化查询本身中的变量来解决此问题:

INSERT INTO random( . . . )
    select u.*
    from (select userID, userNAME, chaID, chaNAME, goal, gender,
                 (@num := if(@u = userID, @num +1,
                            if(@u := userId, 1, 1)
                           )
                ) as row_number,
                userID as dummy,
                @stat as status
           from userchar u cross join
                (select @u = '', @num := 0, @stat := '') params
           order by userID, rand()
          ) u
    where u.row_number <= 3;

还有其他几个问题:

  • 使用insert ,请始终列出各列。 如果您正在学习SQL,那么这尤其重要,因此您要养成良好的习惯。
  • 您不应在一个表达式中分配变量值,而在另一个表达式中使用它。 MySQL(和MariaDB)不保证对select的表达式求值的顺序,因此可以按任一顺序对表达式求值。
  • 如果要随机行,请使用rand() “不确定”和“随机”之间有区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM