我正在尝试将表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个插入; - )
答案 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