SQL 去除表中字段重复的数据,取唯一值

本文介绍了一种使用SQL从含有重复name字段的表中选取唯一name值的方法,通过子查询结合DISTINCT和MAX函数确保每个name对应的记录唯一且保留特定条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明:stable表中name字段的值存在重复(比如有多个tom,但年龄是不一样的),即其它的值不重复,但想取其name唯一的值

select * from stable s1 where id in (select max(distinct id) from stable s2 where s1.name=s2.name ) order by id desc

—————————————————–
(java 架构师全套教程,共760G, 让你从零到架构师,每月轻松拿3万)
请先拍 购买地址, 下载请用百度盘
目录如下:
01.高级架构师四十二个阶段高
02.Java高级系统培训架构课程148课时
03.Java高级互联网架构师课程
04.Java互联网架构Netty、Nio、Mina等-视频教程
05.Java高级架构设计2016整理-视频教程
06.架构师基础、高级片
07.Java架构师必修linux运维系列课程
08.Java高级系统培训架构课程116课时
(送:hadoop系列教程,java设计模式与数据结构, Spring Cloud微服务, SpringBoot入门)

01高级架构师四十二个阶段高内容:
这里写图片描述
这里写图片描述
—————————————————–

### Oracle SQL 查询字段方法 在 Oracle 数据库中,`SELECT DISTINCT` 是一种常用的方式来去除查询结果中的重复记录并返回唯一的数据。以下是关于 `DISTINCT` 的详细介绍以及其实现方式。 #### 使用 `SELECT DISTINCT` 实现字段 通过 `SELECT DISTINCT` 可以确保查询的结果集中只包含唯一的值组合。如果只需要针对单个字段进行,则可以直接使用该关键字;如果是多字段组合,则会对整个字段集合进行[^1]。 ```sql -- 单字段示例 SELECT DISTINCT dept FROM employees; /* 结果: +---------+ | dept | +---------+ | HR | | IT | | Finance | +---------+ */ ``` 对于多个字段的情况,`DISTINCT` 将基于所有选定字段的组合来进行: ```sql -- 多字段示例 SELECT DISTINCT dept, position FROM employees; ``` 上述查询将返回部门 (`dept`) 和职位 (`position`) 组合后的唯一记录[^2]。 --- #### 特殊情况:NULL 值处理 需要注意的是,在使用 `DISTINCT` 进行时,`NULL` 被视为一个特殊的值。如果有两行数据在同一列上都具有 `NULL` 值,那么它们会被认为是相同的,并被当作一条记录保留下来[^3]。 ```sql -- 含有 NULL 值的结构 CREATE TABLE test_nulls ( column_a VARCHAR(50), column_b VARCHAR(50) ); INSERT INTO test_nulls VALUES ('A', NULL); INSERT INTO test_nulls VALUES ('B', 'Value'); INSERT INTO test_nulls VALUES ('C', NULL); INSERT INTO test_nulls VALUES ('D', 'Value'); -- 对含有 NULL 列进行 SELECT DISTINCT column_b FROM test_nulls; /* 结果: +----------+ | column_b | +----------+ | Value | | (null) | +----------+ */ ``` 可以看到,尽管存在两个 `NULL` 值,但在最终结果中只会显示一次[^4]。 --- #### 替代方案:利用聚合函数实现 除了 `DISTINCT` 关键字外,还可以借助其他技术手段完成类似的功能。例如,可以通过 `GROUP BY` 子句达到相同的效果: ```sql -- 使用 GROUP BY 实现效果 SELECT dept, position FROM employees GROUP BY dept, position; ``` 此方法适用于更复杂的场景,比如需要附加计算或其他逻辑操作时。 --- #### 性能优化建议 当面对大规模数据集时,应考虑索引的设计以提高性能。创建覆盖所涉及列的复合索引能够显著加快 `DISTINCT` 或者 `GROUP BY` 类型的操作速度。 ```sql -- 创建复合索引来加速查询 CREATE INDEX idx_dept_position ON employees(dept, position); ``` 这样可以在实际运行过程中减少扫描全的时间消耗。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值