1

我正在尝试将我的表 A 的一部分复制到表 B:

@t1 := 1
INSERT INTO B
SELECT x, y, (@t1:=@t1+1)
FROM A
WHERE z=1
ORDER BY rand()
LIMIT 10

我想要的是在表 B(第三列)中获取从 1 到 10 的值,但它正在生成 12、124、45 等值......我想知道它是否首先执行变量,然后按 rand( ) 因为这些值永远不会超过表 A 中的行数。

有没有其他方法可以从 A 到 B 获得 10 个随机行并将它们标记在从 1 到 10 的第三列(排序列)中?在一个 mysql 语句中,我知道如何插入 10 次;-)

4

2 回答 2

2

首先排序,然后计算从 order by/limit 返回的行的行号:

SET @t1 := 1;

INSERT INTO B
SELECT x, y, (@t1:=@t1+1)
FROM (
  SELECT x, y
  FROM A
  WHERE z=1
  ORDER BY rand()
  LIMIT 10) ten_rows
于 2013-04-18T12:16:39.520 回答
0

尝试使其成为嵌套查询:

INSERT INTO B
    SELECT x, y, (@t1:=@t1+1)
    FROM (
        SELECT x, y
        FROM A
        WHERE z=1
        ORDER BY rand()
        LIMIT 10
    ) A1
    WHERE @t1 := 1
于 2013-04-18T12:23:17.537 回答