我有3个表,它们彼此不相同。根据我的一个要求,我必须把所有这些表的记录复制到另一个表。这部分没问题。我的问题是我插入的记录现在是有序的。像
first 100 records from table1
second 100 records from table2
third 100 records from table3
我想做的是change/mix
记录位置。就像我选择了前100条记录一样,应该是来自所有三个表的记录。
从ORDER BY Rand()
中选择数据不是我想要的。我只需要选择数据并显示这些数据。有什么办法能解决这个问题吗?由于
一个很棒的帖子,处理了几个情况,从简单,到空白,到不统一的空白。
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列表中可能存在间隙。有关更高级的示例,请参阅文章
如果您不想稍后查询rand()
,您可以通过首先从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的奇怪顺序,也许有人可以评论。