MySQL中的游标更新查询有什么问题?
我有一个表,它有一个列order_id,类型int,它们是从1到30的30个数字,并且是唯一的 我想在MySQL中通过查询随机更新此列,但它们必须是唯一的,并且在1到30的范围内。 我尝试了这个,但它有一个问题是“phpmyadmin”在服务器中,并没有显示问题! 有人知道问题出在哪里吗MySQL中的游标更新查询有什么问题?,mysql,Mysql,我有一个表,它有一个列order_id,类型int,它们是从1到30的30个数字,并且是唯一的 我想在MySQL中通过查询随机更新此列,但它们必须是唯一的,并且在1到30的范围内。 我尝试了这个,但它有一个问题是“phpmyadmin”在服务器中,并没有显示问题! 有人知道问题出在哪里吗 declare Qid2 int; declare counter int; DECLARE done INT DEFAULT FALSE; declare c cursor set c = cursor f
declare Qid2 int;
declare counter int;
DECLARE done INT DEFAULT FALSE;
declare c cursor
set c = cursor for select order_id from Table_1
open c;
fetch next from c into Qid2;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
while !done DO
set Qid2 = (select RAND()*30);
set counter = ( select count(*) from Table_1 where order_id = Qid2);
while counter!=0 do
Begin
set Qid2 = (select RAND()*30);
set counter =( select count(*) from Table_1 where order_id = Qid2);
End while;
update Table_1
set order_id = Qid2 where current of c;
fetch next from c ;
End while;
close c;
不需要接近逻辑,我就可以识别出6个错误(如果没有设置分隔符,可能是7个)。我纠正了明显的错误
drop procedure if exists p;
delimiter $$
create procedure p()
begin
declare Qid2 int;
declare counter int;
declare order_id int; #error 3 not declared
DECLARE done INT DEFAULT FALSE;
declare c cursor for select order_id from Table_1; #error 1 incorrect syntax
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; #error 2 wrong position in code
open c;
fetch next from c into Qid2;
while !done DO
set order_id = (select RAND()*30); #error 3 not declared
set counter = ( select count(*) from Table_1 where order_id = Qid2);
while counter!=0 do
#Begin #error 4 not required
set Qid2 = (select RAND()*30);
set counter =( select count(*) from Table_1 where order_id = Qid2);
End while;
#update Table_1
# set order_id = Qid2 where current of c; #error 5 where? commented out
fetch next from c into Qid2 ; #error 6 into missing.
End while;
close c;
end $$
delimiter ;
您编辑的此查询在我的服务器中有20多个错误!它在每个“declare”单词和“$$”以及“while”单词中都有错误等等……因为您可能没有在phpmyadmin中设置默认分隔符。对不起,先生,但我对MySQL非常陌生,我不知道这个分隔符是什么以及如何定义它!可能有任何文章可以提供更多详细信息吗?这个查询的逻辑是完全正确的。实际上它在SQL Server中,运行良好,但我想要将其转换为MySQL语言。我删除了“$$”并将其替换为“;”,它工作了,但返回了空结果,我知道原因!我想这是因为这行“set order_id=Qid2 where current of c”。我删除了c的where current,因为它不是MySQL语言,但显示“current line”非常重要。我们如何在MySQL中编写它?谢谢你,先生,但我尝试了这个,它有两个问题:第一,它是一个插入操作,而不是更新。第二,它在“)n”行中显示错误。第二:这显然不是真的。第一:根据更新调整此选择非常简单。第三:你通常不会存储一个容易导出的结果,但我没听清楚!你的意思是我应该有两列,一列按顺序排列,另一列随机更改?我是MySQL新手,但x列似乎不会存储在数据库中,对吗?我想更改已经存储在数据库中的那个列,因为我以后需要它。更新以详细说明所有内容-但您仍然不太可能需要存储此类内容。
DROP TABLE my_table;
CREATE TABLE my_table (i INT NOT NULL);
INSERT INTO my_table VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9);
SELECT *
FROM
( SELECT i
, @x:=@x+1 x
FROM
( SELECT i FROM my_table ORDER BY RAND())a, (SELECT @x:=0) vars
) n
ORDER
BY i;
+---+------+
| i | x |
+---+------+
| 1 | 7 |
| 2 | 2 |
| 3 | 4 |
| 4 | 9 |
| 5 | 3 |
| 6 | 8 |
| 7 | 1 |
| 8 | 6 |
| 9 | 5 |
+---+------+