我正在尝试从 MySQL 中的查找表中随机选择名字来构建测试数据集。我有一个包含 200 个名字、性别和从 1 到 200 的行 ID 的表。像这样:
id firstname gender
1 Aaron m
2 Adam m
3 Alan m
etc...
我正在使用具有以下查询的随机生成器从该表中进行选择:
SELECT id, firstname FROM firstname WHERE id = round(1 + (rand() * 199));
我期望随机数与查找表中的一个 id 完全一致,从而产生一个单一的结果,例如
id firstname
43 Jason
一次又一次地运行代码给了我一个选择
- 单行(如上)
- 或多行,如
id firstname
29 Ethan
147 Jean
- 或没有结果(两个字段都为 NULL)。
如果我自己运行随机生成器,它总是会生成一个介于 1 和 200 之间的数字。如下所示,id 字段是 INT,如果我将结果转换为 SIGNED,则查询的行为方式相同。我也尝试使用 FLOOR 而不是 ROUND,只是想看看它是否有任何不同 - 唉,不。
谁能告诉我为什么异常?我错过了什么?
下面是一些用于创建原始表的前 20 行的代码,用于测试目的:
-- First Name --
drop table if exists firstname;
CREATE TABLE firstname (
id INT NOT NULL,
firstname VARCHAR(20) NOT NULL,
gender VARCHAR(1) NOT NULL,
PRIMARY KEY (id),
UNIQUE (firstname)
);
INSERT INTO firstname
(id,firstname,gender)
VALUES
(1,"Aaron","m"),
(2,"Adam","m"),
(3,"Alan","m"),
(4,"Albert","m"),
(5,"Alexander","m"),
(6,"Andrew","m"),
(7,"Anthony","m"),
(8,"Arthur","m"),
(9,"Austin","m"),
(10,"Benjamin","m"),
(11,"Billy","m"),
(12,"Bobby","m"),
(13,"Brandon","m"),
(14,"Brian","m"),
(15,"Bruce","m"),
(16,"Bryan","m"),
(17,"Carl","m"),
(18,"Charles","m"),
(19,"Christian","m"),
(20,"Christopher","m");