Bug #107840 MySQL 5.6.20
Description:
Blank set or doubled when sampled by a random unique identifier
The result of the queries:
mysql> drop table if exists test;
Query OK, 0 rows affected (0.00 sec)
mysql> create table test (
-> id int not null auto_increment,
-> dsc char(12),
-> constraint pk_id primary key(id)
-> ) engine=myisam;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test(dsc) values ('one'), ('two'), ('three'), ('four'), ('five');
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> select * from test;
+----+-------+
| id | dsc |
+----+-------+
| 1 | one |
| 2 | two |
| 3 | three |
| 4 | four |
| 5 | five |
+----+-------+
5 rows in set (0.00 sec)
mysql> select count(*) from test;
+----------+
| count(*) |
+----------+
| 5 |
+----------+
1 row in set (0.00 sec)
mysql> select floor(1 + rand() * 5) id;
+----+
| id |
+----+
| 5 |
+----+
1 row in set (0.00 sec)
mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id);
Empty set (0.00 sec) (***** Why? *****)
mysql> select floor(1 + rand() * 5) id;
+----+
| id |
+----+
| 4 |
+----+
1 row in set (0.00 sec)
mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id);
Empty set (0.00 sec) (***** Why? *****)
mysql> select floor(1 + rand() * 5) id;
+----+
| id |
+----+
| 3 |
+----+
1 row in set (0.00 sec)
mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id);
+----+------+
| id | dsc |
+----+------+
| 4 | four |
+----+------+
1 row in set (0.00 sec)
mysql> select floor(1 + rand() * 5) id;
+----+
| id |
+----+
| 2 |
+----+
1 row in set (0.00 sec)
mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id);
+----+------+
| id | dsc |
+----+------+
| 4 | four |
| 5 | five |
+----+------+
2 rows in set (0.00 sec) (***** Why? *****)
mysql> select floor(1 + rand() * 5) id;
+----+
| id |
+----+
| 5 |
+----+
1 row in set (0.00 sec)
mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id);
+----+------+
| id | dsc |
+----+------+
| 4 | four |
| 5 | five |
+----+------+
2 rows in set (0.00 sec) (***** Why? *****)
How to repeat:
drop table if exists test;
create table test (
id int not null auto_increment,
dsc char(12),
constraint pkGood_id primary key(id)
) engine=myisam;
insert into test(dsc) values ('one'), ('two'), ('three'), ('four'), ('five');
select * from test;
select count(*) from test;
select floor(1 + rand() * 5) id;
select id, dsc from test where id = (select floor(1 + rand() * 5) id);
select floor(1 + rand() * 5) id;
select id, dsc from test where id = (select floor(1 + rand() * 5) id);
select floor(1 + rand() * 5) id;
select id, dsc from test where id = (select floor(1 + rand() * 5) id);
select floor(1 + rand() * 5) id;
select id, dsc from test where id = (select floor(1 + rand() * 5) id);
select floor(1 + rand() * 5) id;
select id, dsc from test where id = (select floor(1 + rand() * 5) id);
Suggested fix:
no
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.041 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: Blank set or doubled when sampled by a random unique identifier The result of the queries: mysql> drop table if exists test; Query OK, 0 rows affected (0.00 sec) mysql> create table test ( -> id int not null auto_increment, -> dsc char(12), -> constraint pk_id primary key(id) -> ) engine=myisam; Query OK, 0 rows affected (0.00 sec) mysql> insert into test(dsc) values ('one'), ('two'), ('three'), ('four'), ('five'); Query OK, 5 rows affected (0.00 sec) Records: 5 Duplicates: 0 Warnings: 0 mysql> select * from test; +----+-------+ | id | dsc | +----+-------+ | 1 | one | | 2 | two | | 3 | three | | 4 | four | | 5 | five | +----+-------+ 5 rows in set (0.00 sec) mysql> select count(*) from test; +----------+ | count(*) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec) mysql> select floor(1 + rand() * 5) id; +----+ | id | +----+ | 5 | +----+ 1 row in set (0.00 sec) mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id); Empty set (0.00 sec) (***** Why? *****) mysql> select floor(1 + rand() * 5) id; +----+ | id | +----+ | 4 | +----+ 1 row in set (0.00 sec) mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id); Empty set (0.00 sec) (***** Why? *****) mysql> select floor(1 + rand() * 5) id; +----+ | id | +----+ | 3 | +----+ 1 row in set (0.00 sec) mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id); +----+------+ | id | dsc | +----+------+ | 4 | four | +----+------+ 1 row in set (0.00 sec) mysql> select floor(1 + rand() * 5) id; +----+ | id | +----+ | 2 | +----+ 1 row in set (0.00 sec) mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id); +----+------+ | id | dsc | +----+------+ | 4 | four | | 5 | five | +----+------+ 2 rows in set (0.00 sec) (***** Why? *****) mysql> select floor(1 + rand() * 5) id; +----+ | id | +----+ | 5 | +----+ 1 row in set (0.00 sec) mysql> select id, dsc from test where id = (select floor(1 + rand() * 5) id); +----+------+ | id | dsc | +----+------+ | 4 | four | | 5 | five | +----+------+ 2 rows in set (0.00 sec) (***** Why? *****) How to repeat: drop table if exists test; create table test ( id int not null auto_increment, dsc char(12), constraint pkGood_id primary key(id) ) engine=myisam; insert into test(dsc) values ('one'), ('two'), ('three'), ('four'), ('five'); select * from test; select count(*) from test; select floor(1 + rand() * 5) id; select id, dsc from test where id = (select floor(1 + rand() * 5) id); select floor(1 + rand() * 5) id; select id, dsc from test where id = (select floor(1 + rand() * 5) id); select floor(1 + rand() * 5) id; select id, dsc from test where id = (select floor(1 + rand() * 5) id); select floor(1 + rand() * 5) id; select id, dsc from test where id = (select floor(1 + rand() * 5) id); select floor(1 + rand() * 5) id; select id, dsc from test where id = (select floor(1 + rand() * 5) id); Suggested fix: no