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

SQL查询异常:非目标组合PORT4、PORT6意外出现在查询结果中

问题原因及解决办法

你的查询逻辑确实存在问题,根源是SQL逻辑运算符的优先级:AND的优先级比OR高,导致原语句的条件被拆解成了几个独立的判断,完全偏离了你原本的筛选意图。

原WHERE子句实际执行的逻辑等价于:

WHERE 
  (as_of_date = '2022-01-01' AND asset_class = 'bond')
  OR (asset_class = 'swap' AND portfolio = 'PORT1')
  OR portfolio = 'PORT2'
  OR portfolio = 'PORT3'

这就导致:

  • 所有PORT2、PORT3的记录,不管日期和资产类别都会被选中
  • 2022-01-01当天资产类别为bond的所有组合(包括PORT4、PORT6)也会被选中
  • 资产类别为swap且属于PORT1的记录也会被选中

这就是为什么结果里出现了PORT4、PORT6。

修正后的查询语句

你需要用括号把OR条件分组,明确逻辑关系,或者用IN简化写法:

写法一(用括号分组OR)

SELECT DISTINCT portfolio
FROM holdings_table
WHERE as_of_date = '2022-01-01'
  AND (asset_class = 'bond' OR asset_class = 'swap')
  AND (portfolio = 'PORT1' OR portfolio = 'PORT2' OR portfolio = 'PORT3')

写法二(用IN简化)

SELECT DISTINCT portfolio
FROM holdings_table
WHERE as_of_date = '2022-01-01'
  AND asset_class IN ('bond', 'swap')
  AND portfolio IN ('PORT1', 'PORT2', 'PORT3')

这两种写法都能严格筛选出2022-01-01当天,属于PORT1/2/3且资产类别为bond或swap的组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 00:45:37