如何在SQL中查询info表指定关键词的去重name记录?
解决info表中name字段指定关键词去重显示的问题
没问题,我来帮你搞定这个需求!根据你说的情况,分两种场景给你对应的解决方案:
场景1:仅匹配完全一致的"alex and michel"
如果这10条记录里的name字段是完全一模一样的字符串(没有大小写、空格这类差异),那直接用DISTINCT或者GROUP BY就能轻松去重,只返回一次结果:
方法1:使用DISTINCT
SELECT DISTINCT name FROM info WHERE name = 'alex and michel';
DISTINCT关键字会自动过滤掉重复的行,只保留唯一的name值。
方法2:使用GROUP BY
SELECT name FROM info WHERE name = 'alex and michel' GROUP BY name;
通过GROUP BY name按name字段分组,每组只会返回一条记录,同样能达到去重效果。
场景2:匹配格式不同的"alex and michel"
如果这10条记录的name是格式不同的同内容(比如大小写不同:Alex And Michel,或者空格冗余:alex and michel),那需要先把字符串标准化,再去重筛选:
以MySQL为例(处理大小写和多余空格)
SELECT DISTINCT LOWER(TRIM(REPLACE(name, ' ', ' '))) AS standardized_name FROM info WHERE LOWER(TRIM(REPLACE(name, ' ', ' '))) = 'alex and michel';
这里用LOWER()把所有字符转小写,TRIM()去掉首尾空格,REPLACE()把多个连续空格替换成单个空格,先统一格式,再筛选匹配的内容并去重。
以PostgreSQL为例(处理任意数量的多余空格)
SELECT DISTINCT LOWER(REGEXP_REPLACE(name, '\s+', ' ', 'g')) AS standardized_name FROM info WHERE LOWER(REGEXP_REPLACE(name, '\s+', ' ', 'g')) = 'alex and michel';
用REGEXP_REPLACE()配合正则\s+可以一次性把任意多个连续空格替换成单个,处理起来更灵活。
这样不管原来的记录格式怎么变,只要核心内容是"alex and michel",最终都会只显示一次标准化后的结果。
内容的提问来源于stack exchange,提问作者Simoow
相关产品推荐
相关产品推荐

