我希望将行从一个MySQL表复制到另一个MySQL表,同时随机化两个字段的顺序,即我想从id
,a
,b
获取字段的行{1}}并将其插入table1
,但在随机行上交换table2
和a
。
这就是我的尝试:
b
我希望这会产生每行一个随机数,但它实际上只是为每个查询生成一个随机数,所以它是a,b表示所有行或b,a表示所有行。我需要改变什么?
P.S:我正在使用变量,因为在两个IF中调用INSERT INTO table2 (id, a, b)
SELECT
id,
IF(@r=RAND() < 0.5, a, b),
IF(@r < 0.5, b, a)
FROM table1
WHERE table1.filter = 42;
将生成两个单独的数字,我可以两次获得相同的字段。有没有变量的方法吗?
答案 0 :(得分:2)
使用@variables似乎可行,但MySQL discourages assigning and reading values to variables inside same statement因为:
...涉及用户变量的表达式的评估顺序 未定义。
更好的解决方案如下:
-- INSERT INTO ...
SELECT
id,
IF(r < 0.5, a, b),
IF(r < 0.5, b, a)
FROM (
SELECT id, a, b, RAND() AS r
FROM table1
WHERE table1.filter = 42
) x
答案 1 :(得分:0)
INSERT INTO table2 (id, a, b)
set @r=0;
SELECT
id,
IF(@r=RAND() < 0.5, a, b),
IF(@r < 0.5, b, a)
FROM table1
WHERE table1.filter = 42;