混合RAND()和UNION会给出随机rowcount吗?

时间:2010-09-16 14:28:09

标签: mysql random union

我正在测试一个查询以获取MySQL中的随机整数,我注意到了这种行为:

mysql> SELECT FLOOR(0 + (RAND() * 5)) UNION SELECT FLOOR(0 + (RAND() * 5)) UNION SELECT FLOOR(0 + (RAND() * 5));
+-------------------------+
| FLOOR(0 + (RAND() * 5)) |
+-------------------------+
|                       1 |
|                       2 |
|                       4 |
+-------------------------+
3 rows in set (0.00 sec)

mysql> SELECT FLOOR(0 + (RAND() * 5)) UNION SELECT FLOOR(0 + (RAND() * 5)) UNION SELECT FLOOR(0 + (RAND() * 5));
+-------------------------+
| FLOOR(0 + (RAND() * 5)) |
+-------------------------+
|                       4 |
+-------------------------+
1 row in set (0.00 sec)

mysql> SELECT FLOOR(0 + (RAND() * 5)) UNION SELECT FLOOR(0 + (RAND() * 5)) UNION SELECT FLOOR(0 + (RAND() * 5));
+-------------------------+
| FLOOR(0 + (RAND() * 5)) |
+-------------------------+
|                       1 |
|                       4 |
|                       0 |
+-------------------------+
3 rows in set (0.00 sec)

我似乎在结果集中获得了随机数量的行!那里有3个UNION ed SELECT。到底是怎么回事?我原以为rand语句中的一个结果可能是因为RAND()没有元组,但这没有意义 - 应该有一些结果,一个{{ 1}}至少!

NULL

1 个答案:

答案 0 :(得分:3)

UNION消除了重复的结果,因为它是一个有序的运算符。如果您希望保留重复项,请使用UNION ALL。也许我误解了你的问题,但这似乎就是我对这个查询所期望的结果类型。