0

我有3 张彼此不相同的桌子。根据我的一个要求,我必须将所有这些表记录复制到另一个表中。那部分没问题。我的问题是我插入的记录现在是有序的。喜欢

first 100 records from table1
second 100 records from table2
third 100 records from table3

我想做的是change/mix记录位置。就像我选择前 100 条记录一样,应该有来自所有三个表的记录。

从中选择数据ORDER BY Rand()不是我想要的。我只需要选择数据并显示这些数据。有什么办法可以解决这个问题吗?谢谢

4

2 回答 2

0

处理多种情况的出色帖子,从简单到间隙,再到带有间隙的不均匀。

http://jan.kneschke.de/projects/mysql/order-by-rand/

对于大多数一般情况,您可以这样做:

SELECT name
FROM random AS r1 JOIN
   (SELECT (RAND() *
                 (SELECT MAX(id)
                    FROM random)) AS id)
    AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1

这假设 id 的分布是相等的,并且 id 列表中可能存在间隙。有关更高级的示例,请参阅文章

于 2013-01-16T07:42:28.080 回答
0

如果您不想稍后查询,rand()您可以通过首先从 union select 中插入来创建表rand()

INSERT INTO merged (a, b)
SELECT a, b FROM (
  SELECT a, b, rand() AS r FROM t1
  UNION ALL
  SELECT a, b, rand() AS r FROM t2
) ORDER BY r

但是,也请考虑一下我刚刚遇到的这篇文章:INSERT INTO SELECT 奇怪的顺序使用 UNION,也许有人可以发表评论。

于 2013-01-16T07:42:59.227 回答