如何编写仅在首次查询无匹配时执行二级查询的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
相关产品推荐
相关产品推荐

