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
相关产品推荐
相关产品推荐

