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

Oracle SQL查询实现:LOCATION表优先取area_nme非空记录

适配双场景的Oracle SQL查询方案

核心需求为同一location_id下优先返回area_nme非空的记录,仅当该id无任何area_nme非空记录时,返回area_nme为空的记录,推荐使用Oracle支持的窗口函数实现,逻辑清晰性能更优:

SELECT location_id, location_nme, pstl_cd, area_nme
FROM (
    SELECT 
        t.*,
        -- 按location_id分组,非空area_nme排序优先级更高
        ROW_NUMBER() OVER (
            PARTITION BY location_id 
            ORDER BY CASE WHEN area_nme IS NOT NULL THEN 1 ELSE 2 END ASC
        ) AS rn
    FROM LOCATION t
    WHERE location_id = :input_location_id -- 替换为实际要查询的location_id,如123、789
)
WHERE rn = 1;

逻辑验证

  • 场景1查询location_id=123:分组内area_nme为Southern的非空记录排序为第1位,直接返回该条符合要求的结果
  • 场景2查询location_id=789:该id不存在area_nme非空的记录,唯一的空值记录排序为第1位,正常返回不会出现无结果的问题

老版本Oracle兼容方案

如果使用不支持窗口函数的Oracle老版本,可改用EXISTS逻辑实现:

SELECT * 
FROM LOCATION t
WHERE location_id = :input_location_id
AND (
    area_nme IS NOT NULL
    -- 仅当当前id没有非空area_nme记录时,才保留空值记录
    OR NOT EXISTS (
        SELECT 1 
        FROM LOCATION t2 
        WHERE t2.location_id = t.location_id 
        AND t2.area_nme IS NOT NULL
    )
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:24:03