ID与FRAND相比的MYSQL SELECT返回一,多于一且无行

时间:2018-11-06 00:16:00

标签: mysql

具有给定的表和数据:

CREATE TABLE `people` (
  `id` integer auto_increment,
  `name` varchar(20),
  PRIMARY KEY(`id`)
);

INSERT INTO `people` (`name`) VALUES ('John'), ('Emma'), ('George'), ('Barry'), ('Lisa'), ('Bob'), ('Olivia');

查询:

SET @all = (SELECT COUNT(id) FROM `people`);    
SELECT * FROM `people` WHERE `id` = FLOOR(1 + RAND() * @all);

结果:

id  name
2   Emma
5   Lisa

id  name
3   George
4   Barry

id  name
5   Lisa

id  name
1   John
6   Bob

有时结果有3行

id  name
3   George
4   Barry
7   Olivia

一旦我得到4行结果

id  name
4   Barry
5   Lisa
6   Bob
7   Olivia

或空结果

当我检查由表达式FLOOR(1 + RAND() * @all)生成的值时,它似乎是整数值,例如。 5,而不是小数点。

但是当我先将值存储到变量中,然后在查询中使用该变量时,结果如预期的那样,总是一行:

SET @r = FLOOR(1 + RAND() * @all);
SELECT * FROM `people` WHERE `id` = @r;

我猜想,当我将FLOOR的结果存储到一个变量中时,它会被转换,但是mysql如何比较一个结果,该值等于许多不同的值,我的第一个猜测是它以某种方式被四舍五入,但是当我得到的值的delta大于4,那么我的下一个猜测将是一些位比较和十进制位表示的恶作剧,但我不知道。

0 个答案:

没有答案