php – 为什么我的mysql DISTINCT不起作用?
发布时间:2020-12-13 22:18:32 所属栏目:PHP教程 来源:网络整理
导读:为什么下面的两个查询返回重复的member_id而不是第三个? 我需要第二个查询才能使用distinct.无论何时我运行GROUP BY,此查询都非常慢,并且结果集不会返回与distinct相同的值(值是错误的). SELECT member_id,id FROM ( SELECT * FROM table1 ORDER BY created
为什么下面的两个查询返回重复的member_id而不是第三个?
我需要第二个查询才能使用distinct.无论何时我运行GROUP BY,此查询都非常慢,并且结果集不会返回与distinct相同的值(值是错误的). SELECT member_id,id FROM ( SELECT * FROM table1 ORDER BY created_at desc ) as u LIMIT 5 +-----------+--------+ | member_id | id | +-----------+--------+ | 11333 | 313095 | | 141831 | 313094 | | 141831 | 313093 | | 12013 | 313092 | | 60821 | 313091 | +-----------+--------+ SELECT distinct member_id,id FROM ( SELECT * FROM table1 ORDER BY created_at desc ) as u LIMIT 5 +-----------+--------+ | member_id | id | +-----------+--------+ | 11333 | 313095 | | 141831 | 313094 | | 141831 | 313093 | | 12013 | 313092 | | 60821 | 313091 | +-----------+--------+ SELECT distinct member_id FROM ( SELECT * FROM table1 ORDER BY created_at desc ) as u LIMIT 5 +-----------+ | member_id | +-----------+ | 11333 | | 141831 | | 12013 | | 60821 | | 64980 | +-----------+ 我的表样本 CREATE TABLE `table1` ( `id` int(11) NOT NULL AUTO_INCREMENT,`member_id` int(11) NOT NULL,`s_type_id` int(11) NOT NULL,`created_at` datetime DEFAULT NULL,PRIMARY KEY (`id`),KEY `s_FI_1` (`member_id`),KEY `s_FI_2` (`s_type_id`) ) ENGINE=InnoDB AUTO_INCREMENT=313096 DEFAULT CHARSET=utf8; 解决方法
DISTINCT是一个关键字,只能应用于整个SELECT,而不能应用于单个字段.它确保数据库不返回两个相同的行.这就是为什么你的第二个查询与DISTINCT只返回一次每个member_id,而你的第一个返回它两次.在其结果集中,每行确实是唯一的,即使您可以获得相同member_id的几倍.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |