将一列子查询分配给列

时间:2018-07-21 06:52:55

标签: mysql

因此,我得到了一个带有主键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

1 个答案:

答案 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