请教下SELECT areaname FROM area WHERE areaid = ROUND(rand()*32)这句话为什么有时候会出现多条记录??
mysql版本:5.7.23-log MySQL Community Server (GPL)
表结构:
CREATE TABLE area (
areaid int(11) NOT NULL,
areaname varchar(50) DEFAULT NULL,
parentId int(11) DEFAULT NULL,
PRIMARY KEY (areaid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据:
INSERT INTO area VALUES (1, '北京', '4744');
INSERT INTO area VALUES (2, '上海', '4744');
INSERT INTO area VALUES (3, '天津', '4744');
INSERT INTO area VALUES (4, '重庆', '4744');
INSERT INTO area VALUES (5, '河北', '4744');
INSERT INTO area VALUES (6, '山西', '4744');
INSERT INTO area VALUES (7, '河南', '4744');
INSERT INTO area VALUES (8, '辽宁', '4744');
INSERT INTO area VALUES (9, '吉林', '4744');
INSERT INTO area VALUES (10, '黑龙江', '4744');
INSERT INTO area VALUES (11, '内蒙古', '4744');
INSERT INTO area VALUES (12, '江苏', '4744');
INSERT INTO area VALUES (13, '山东', '4744');
INSERT INTO area VALUES (14, '安徽', '4744');
INSERT INTO area VALUES (15, '浙江', '4744');
INSERT INTO area VALUES (16, '福建', '4744');
INSERT INTO area VALUES (17, '湖北', '4744');
INSERT INTO area VALUES (18, '湖南', '4744');
INSERT INTO area VALUES (19, '广东', '4744');
INSERT INTO area VALUES (20, '广西', '4744');
INSERT INTO area VALUES (21, '江西', '4744');
INSERT INTO area VALUES (22, '四川', '4744');
INSERT INTO area VALUES (23, '海南', '4744');
INSERT INTO area VALUES (24, '贵州', '4744');
INSERT INTO area VALUES (25, '云南', '4744');
INSERT INTO area VALUES (26, '西藏', '4744');
INSERT INTO area VALUES (27, '陕西', '4744');
INSERT INTO area VALUES (28, '甘肃', '4744');
INSERT INTO area VALUES (29, '青海', '4744');
INSERT INTO area VALUES (30, '宁夏', '4744');
INSERT INTO area VALUES (31, '新疆', '4744');
INSERT INTO area VALUES (32, '台湾', '4744');
因为where条件中包含了rand(),使得mysql把它当做变量来处理。无法用常量的等值查询,如果你想实现随机取一条数据出来可以试试这样写
SELECT areaName,areaid FROM area ORDER BY RAND() LIMIT 1 如果考虑效率问题你可以看一下这篇文章
https://www.cnblogs.com/tianye8123/p/5994223.html
哦哦,好的,谢谢。
我最近查了下资料,应该是mysql自5.7以后的一个bug。并且mysql官方也没有修复这个bug的意思。
这种问题你不该问!!!自己测试一下就知道了
不好意思,还请大佬指点一下怎么测试?谢谢大佬了。