You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何用SELECT DISTINCT返回重复的去重字段值?

MySQL去重后重复返回同一字段的实现方法

你需要先对字段a去重,再将每个去重后的值重复输出两次,比如输入包含重复值的表数据,最终每行呈现值|值的格式。

你尝试的两种写法都不可行:

  • SELECT DISTINCT(a) AS a1, DISTINCT(a) AS a2 FROM myTable:MySQL不支持在字段列表中多次使用DISTINCT关键字
  • SELECT DISTINCT(a) AS a1, a1 FROM myTable:SELECT子句中定义的别名无法在同层直接引用

这里提供两种高效的实现方案:

方案1:子查询/CTE先去重再重复输出

先通过子查询(或CTE)完成一次去重,再在外部查询中将去重后的字段重复输出:

子查询写法(兼容所有MySQL版本)

SELECT a AS a1, a AS a2 FROM (SELECT DISTINCT a FROM myTable) AS temp;

CTE写法(MySQL 8.0及以上版本支持)

WITH distinct_a AS (
    SELECT DISTINCT a FROM myTable
)
SELECT a AS a1, a AS a2 FROM distinct_a;

这种方式只执行一次去重逻辑,避免重复计算,符合你优化查询的需求。

方案2:直接用DISTINCT配合重复字段

更简洁的写法,直接在SELECT中重复字段,再用DISTINCT对整行去重:

SELECT DISTINCT a AS a1, a AS a2 FROM myTable;

MySQL会基于字段a的内容对整行做去重,最终结果和预期完全一致,性能表现也很优秀。

示例验证

对于表中数据:

aaa
bbb
bbb
bbb
ccc
aaa

使用上述任意一种查询语句,都会得到预期输出:

a1  | a2
-----|-----
aaa | aaa
bbb | bbb
ccc | ccc

内容的提问来源于stack exchange,提问作者ZioBit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:15:03