因此,我得到了一个带有主键id
和指向target_id
的外键id
的表。我想做的是将每个target_id
设置为随机的id
,而不是它本身。
此刻,这就是我获得随机ID的方式:
SELECT id FROM (SELECT id FROM test) AS sub ORDER BY RAND()
但是,当我尝试将随机ID的子查询分配给列target_id
时,抛出错误,表明该子查询返回多个行。
但是,当我尝试
UPDATE SET `target_id` = `id`
查看是否可以直接复制列,它起作用了,表明是可行的。但是为什么不能将子查询的一列复制到表的一列中?
对不起,如果我说的问题真的很奇怪;我对MySql不太了解:/
谢谢! :D
答案 0 :(得分:0)
您可能会在the link的评论中猜到您的问题-当时我没有时间进一步解释...-我假设您实际上想要的是将第target_id
列的值改组。在Mysql中,这似乎是一项艰巨的任务,正如我的评论中的the post所示。
我也进行了一些尝试,并使用用户定义的变量提出了这个“主题变化”。我首先尝试使用临时表,但是只能被引用一次,所以最后我不得不恢复为使用“常规”表tmp
:
drop table if exists tmp;
select @n:=0;select @m:=0;
create table tmp select * from
(select *,@n:=@n+1 nr
from (select id,@m:=@m+1 n from tbl order by rand()) rnd
order by rand()
) rnd ;
update tbl s
inner join tmp a on a.id=s.id
inner join tmp b on b.nr=a.n
inner join tbl t on t.id=b.id
set t.target_id=s.target_id;
在此处查看小样例:http://rextester.com/XYF73480