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

如何编写仅在首次查询无匹配时执行二级查询的SQL语句

实现优先SEDOL查询、无结果时 fallback 到RIC的SQL逻辑

看起来你需要的是优先匹配SEDOLCode,只有当SEDOL完全没有匹配记录时,才执行RICCode的查询,而不是当前用OR同时返回两类匹配的结果。下面是两种可行的实现方案:

方案一:使用UNION ALL + NOT EXISTS判断

这种写法逻辑清晰,直接通过子查询判断SEDOL是否有匹配,再决定是否执行RIC的查询:

-- 第一步:优先获取SEDOLCode匹配的记录
SELECT *, GETDATE() AS QueryTime
FROM Securities sec 
WHERE sec.SEDOLCode = 'ABCDEF'

UNION ALL

-- 第二步:仅当SEDOL无匹配时,才查询RICCode的记录
SELECT *, GETDATE() AS QueryTime
FROM Securities sec 
WHERE sec.RICCode = '002815.SZ'
AND NOT EXISTS (
    -- 子查询判断SEDOL是否存在匹配记录
    SELECT 1 FROM Securities 
    WHERE SEDOLCode = 'ABCDEF'
)

方案二:使用CTE预存SEDOL结果,再判断是否需要查询RIC

如果需要复用SEDOL的查询结果,用CTE(公共表表达式)会更直观:

WITH SedolMatches AS (
    -- 预查询SEDOL的匹配结果
    SELECT *, GETDATE() AS QueryTime
    FROM Securities 
    WHERE SEDOLCode = 'ABCDEF'
)
-- 先返回SEDOL的结果(如果有)
SELECT * FROM SedolMatches
UNION ALL
-- 只有当SEDOL无结果时,才返回RIC的匹配
SELECT *, GETDATE() AS QueryTime
FROM Securities 
WHERE RICCode = '002815.SZ'
AND (SELECT COUNT(*) FROM SedolMatches) = 0

逻辑说明

这两种写法都能保证:

  • 如果SEDOLCode有匹配记录,只会返回SEDOL对应的结果,不会触发RIC的查询
  • 只有当SEDOLCode完全没有匹配时,才会执行RICCode的查询并返回对应结果

正好满足你从文件取数更新Price表时,"按需触发二级查询"的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:08:01