如何在mysql中使用distinct_mysql distinct去重语法

2次阅读

DISTINCT 用于去除查询结果中整行重复数据,而非单字段去重;其作用范围是 SELECT 列表中所有字段的组合值,需配合索引优化性能并注意与 ORDER BY、LIMIT 的执行顺序。

如何在 mysql 中使用 distinct_mysql distinct 去重语法

DISTINCT 是 MySQL 中用于去除查询结果中重复行的关键字,它作用于整行数据,而不是单个字段。只要两行在 SELECT 列表中的所有列值完全相同,就会被当作重复行,只保留其中一行。

基本语法:SELECT DISTINCT 字段列表

最常用的形式是紧跟在 SELECT 后面使用 DISTINCT:

  • SELECT DISTINCT name FROM users; —— 去重单个字段(返回不重复的姓名)
  • SELECT DISTINCT city, province FROM addresses; —— 去重组合字段(只有 city 和 province 都相同时才视为重复)
  • SELECT DISTINCT * FROM orders WHERE status = ‘shipped’; —— 对满足条件的完整记录去重

DISTINCT 的作用范围是整行,不是单列

很多人误以为 SELECT DISTINCT name, age FROM people; 是分别对 name 和 age 去重,其实不是。它表示“name 和 age 的组合”唯一。例如:

  • (张三, 25) 和 (张三, 28) 是两条不同记录,都会保留
  • (李四, 30) 出现两次,则只取一次

如果只想获取不重复的 name,但又想顺带查出某个对应的 age(比如最小或最大),需要用 GROUP BY 或窗口函数,不能靠 DISTINCT 实现。

DISTINCT 和 ORDER BY、LIMIT 的配合

DISTINCT 可以和排序、分页一起用,但注意顺序:

  • SELECT DISTINCT category FROM products ORDER BY category LIMIT 5; —— 先去重,再按字母排序,取前 5 个
  • ORDER BY 的字段必须出现在 SELECT 列表中(除非启用了 ONLY_FULL_GROUP_BY 模式外的宽松模式)
  • LIMIT 在 DISTINCT 之后生效,即先得到去重后的完整结果集,再截取

性能提醒:DISTINCT 可能影响查询速度

MySQL 实现 DISTINCT 通常需要临时表或排序操作,尤其在 大数据 量、多字段组合去重时:

  • 确保参与 DISTINCT 的字段上有合适索引(如联合索引覆盖 SELECT 列表)
  • 避免对无意义的全字段(SELECT DISTINCT *)去重,尽量明确列出需要的列
  • 如果只是判断“是否存在”,可用 EXISTS 替代 SELECT DISTINCT … LIMIT 1
星耀云
版权声明:本站原创文章,由 星耀云 2026-01-06发表,共计1035字。
转载说明:转载本网站任何内容,请按照转载方式正确书写本站原文地址。本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。
text=ZqhQzanResources