如何编写查询返回field 1字段无重复值的记录?
嘿,我来帮你搞定这个需求!要只返回field 1字段没有重复值的行,也就是只保留那些在field 1里唯一出现的记录,这里有几个实用的SQL写法,你可以根据自己用的数据库(比如MySQL、PostgreSQL、SQL Server这些)选合适的:
方法1:GROUP BY + HAVING 搭配子查询
先找出field 1里只出现一次的值,再用这些值匹配原表的完整记录:
SELECT * FROM your_table WHERE `field 1` IN ( SELECT `field 1` FROM your_table GROUP BY `field 1` HAVING COUNT(*) = 1 );
子查询会先统计每个field 1值的出现次数,只留下次数为1的唯一值,外层查询就只取这些值对应的整行数据,刚好能排除你提到的123、789这类重复值的行。
方法2:窗口函数(适配MySQL 8.0+、PostgreSQL、SQL Server等)
用窗口函数直接给每个field 1分组的行统计数量,再筛选出数量为1的组:
SELECT * FROM ( SELECT *, COUNT(*) OVER (PARTITION BY `field 1`) AS value_count FROM your_table ) AS sub_query WHERE value_count = 1;
这里PARTITION BY field 1``会把相同field 1值的行归为一组,COUNT(*)统计每组的行数,最后只保留行数为1的组内记录,逻辑清晰还能一次性拿到整行数据。
方法3:EXISTS子查询(适合有唯一主键的表)
如果你的表有唯一标识(比如id),可以用这种方式检查是否存在重复行:
SELECT t1.* FROM your_table t1 WHERE NOT EXISTS ( SELECT 1 FROM your_table t2 WHERE t2.`field 1` = t1.`field 1` AND t2.id != t1.id );
简单来说就是:对于每一行t1,检查有没有其他行t2和它field 1值相同但id不同,如果没有,说明这行的field 1是唯一的,就保留它。
这几种方法都能达到你要的效果——剔除field 1值重复的行,只留下唯一值对应的记录。
内容的提问来源于stack exchange,提问作者bd528
相关产品推荐
相关产品推荐

