我正在测试一个查询以获取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
答案 0 :(得分:3)
UNION
消除了重复的结果,因为它是一个有序的运算符。如果您希望保留重复项,请使用UNION ALL
。也许我误解了你的问题,但这似乎就是我对这个查询所期望的结果类型。