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

Oracle获取列值唯一结果集方法咨询及SQL查询协助请求

Rajendra你好!咱们来逐个解决你的两个Oracle问题:

1. 如何在Oracle数据库中获取结果集中列值唯一的记录?

根据你的具体需求,有几种常用的实现方式:

  • 使用DISTINCT关键字:如果要去除结果集中完全重复的行(所有列值都相同的行),直接在SELECT后添加DISTINCT即可:
    SELECT DISTINCT 列1, 列2, ... FROM 你的表名;
    
  • 按目标列分组(GROUP BY):如果只需要某一列的值唯一,同时要获取其他列的聚合结果(比如最大值、最小值),可以用GROUP BY:
    SELECT 唯一列, MAX(其他列) AS 最新值
    FROM 你的表名
    GROUP BY 唯一列;
    
  • 使用窗口函数ROW_NUMBER():如果需要为每个唯一列值保留特定的一行(比如最新的记录),窗口函数可以帮你精准筛选:
    SELECT *
    FROM (
        SELECT t.*,
               ROW_NUMBER() OVER (PARTITION BY 唯一列 ORDER BY 日期列 DESC) rn
        FROM 你的表名 t
    )
    WHERE rn = 1;
    
    这里PARTITION BY指定需要唯一的列,ORDER BY决定每个分组中保留哪一行(示例中按日期倒序取最新的记录)。
2. 优化你的SQL查询

你的原始查询关联了LineGernal和BaseAddOns表,但存在一个小问题:两个表都有Id列,查询结果中会出现列名重复的情况。咱们先给列和表加别名来解决这个问题,同时根据常见需求提供几种优化方案:

基础优化版(列名清晰无歧义)

SELECT 
    lg.Id AS LineGernal_ID,
    lg.Description,
    lg.SSMS,
    bao.Id AS BaseAddOns_ID
FROM LineGernal lg
INNER JOIN BaseAddOns bao 
    ON lg.Id = bao.ParentLineGernalID

给表加别名(lg代表LineGernal,bao代表BaseAddOns)让查询更简洁,重命名Id列避免结果集中的列名混淆。

如果需要每个LineGernal只对应一条BaseAddOns记录

如果一个LineGernal记录关联了多条BaseAddOns记录,而你只想保留每组的一条匹配结果,可以结合问题1中的窗口函数:

SELECT LineGernal_ID, Description, SSMS, BaseAddOns_ID
FROM (
    SELECT 
        lg.Id AS LineGernal_ID,
        lg.Description,
        lg.SSMS,
        bao.Id AS BaseAddOns_ID,
        ROW_NUMBER() OVER (PARTITION BY lg.Id ORDER BY bao.Id) rn
    FROM LineGernal lg
    INNER JOIN BaseAddOns bao 
        ON lg.Id = bao.ParentLineGernalID
)
WHERE rn = 1;

这个查询会为每个LineGernal保留第一条关联的BaseAddOns记录(按BaseAddOns.Id排序)。

如果需要去除结果集中的重复行

如果关联后的结果存在完全重复的行,可以添加DISTINCT去重:

SELECT DISTINCT
    lg.Id AS LineGernal_ID,
    lg.Description,
    lg.SSMS,
    bao.Id AS BaseAddOns_ID
FROM LineGernal lg
INNER JOIN BaseAddOns bao 
    ON lg.Id = bao.ParentLineGernalID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:28:01