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

Oracle SQL去重需求:优先用car_col数据,无则取car_cat

解决Oracle SQL优先匹配domain并去重的问题

你的需求是优先使用reference_codes表中domain='car_col'的描述信息,当该domain无对应code时再使用domain='car_cat'的,同时要避免结果出现重复行。当前SQL因关联两个domain的所有匹配项导致重复,以下是两种可行的解决方案:

方法一:使用窗口函数ROW_NUMBER()

通过窗口函数给不同domain的匹配项分配优先级,只保留最高优先级的记录:

SELECT customer_id, car_code, code_desc, price
FROM (
    SELECT 
        a.customer_id,
        a.car_code,
        b.description AS code_desc,
        a.price,
        -- 为car_col的记录设置最高优先级(行号1),car_cat为次优先级(行号2)
        ROW_NUMBER() OVER (PARTITION BY a.customer_id, a.car_code ORDER BY CASE b.domain WHEN 'car_col' THEN 1 ELSE 2 END) AS rn
    FROM product a
    LEFT JOIN reference_codes b 
        ON a.car_code = b.code 
        AND b.domain IN ('car_col', 'car_cat')
) t
WHERE rn = 1; -- 仅保留每个(customer_id, car_code)组合中优先级最高的记录

方法二:使用COALESCE结合子查询

直接在SELECT语句中优先获取car_col的描述,无匹配时 fallback 到car_cat:

SELECT 
    a.customer_id,
    a.car_code,
    -- 优先返回car_col的描述,无匹配则返回car_cat的描述
    COALESCE(
        (SELECT description FROM reference_codes WHERE domain = 'car_col' AND code = a.car_code),
        (SELECT description FROM reference_codes WHERE domain = 'car_cat' AND code = a.car_code)
    ) AS code_desc,
    a.price
FROM product a;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:10:17