MySQL 5.5 SELECT DISTINCT - 如何返回多个没有查询重复的列?

标签 mysql sql select distinct

似乎在 MySQL 5.5 上 SELECT DISTINCT 只用一列就可以正常工作。

SELECT DISTINCT type FROM table
WHERE type LIKE 'h%'
LIMIT 5;

返回好的结果:

type
--------
htm
html
htaccess

但是在尝试 SELECT 两列或更多列时

SELECT DISTINCT id, type FROM table
WHERE type LIKE 'h%'
LIMIT 5;

它返回带有重复查询的失败结果:

id | type
---+--------
1  | htm
3  | htm
5  | html
6  | html
7  | html

预期结果:

id | type
---+--------
3  | htm
7  | html
5  | htaccess

id 不需要应用 DISTINCT,因为它有 AUTO_INCREMENT

最佳答案

你想要一个group by:

select
   max(id) as id,
   type
from
   table
where type like 'h%'
group by type

distinct 获取 distinct 行——这意味着除非 every 列中的 every 值相同作为结果集中已有的一行,它将显示该行。在这种情况下,它的行为与描述的完全一致。

通过执行分组依据并使用聚合函数(如max),您可以指定要区分的列,同时聚合其他列为您提供您正在寻找的结果集。

关于MySQL 5.5 SELECT DISTINCT - 如何返回多个没有查询重复的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8673823/

相关文章:

php - 用于更新 session 的 Jquery 登录头不起作用

php - 使用 cookie 在 PHP 中创建 "remember me"系统的安全方法是什么?

php - 无法使用 PHP MySQL 更新数据库,其中数据来自 AngularJS1.2 服务

mysql - 如何连接 3 个表以获得两个表交替的结果

mysql - 如何设置搜索值的优先级

sql - "SELECT INTO"是做什么的?

php - zend - 从 Controller 连接到数据库

mysql - 从两个表中选择值

linux - 相当于 Bash 中的 select() 系统调用

mysql - 多个选择的单个查询 - 即使一个选择返回空