首页 > 解决方案 > 带有 id 的 MYSQL SELECT 与 FLOOR RAND 比较返回一、多于一且无行

问题描述

使用给定的表格和数据:

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 那么我的下一个猜测是一些位比较和十进制位表示恶作剧,但我不知道。

标签: mysql

解决方案


推荐阅读