用SELECT和rand()混淆变量INSERT INTO

时间:2013-04-18 12:08:14

标签: mysql variables

我正在尝试将表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个随机行,并在第3列(排序列)中将它们从1到10标记?在一个mysql语句中,我知道如何使用10个插入; - )

2 个答案:

答案 0 :(得分:2)

先排序,然后根据/ 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

答案 1 :(得分: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