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

SQL查询使用WHERE关键字筛选state_id不生效问题求助

问题原因

SQL中AND逻辑运算符的优先级高于OR,未给筛选条件加括号做逻辑分组时,你编写的WHERE条件会被解析为如下逻辑,导致State_ID筛选规则失效:

-- 实际执行的错误逻辑
(at.State_ID=168) 
OR (at.State_ID = 165) 
OR (at.State_ID = 162 AND at.[RAPID3 Name] IS NOT NULL) 
OR (at.[DLQI Name] IS NOT NULL) 
OR ([HAQ-DI Name] IS NOT NULL)

只要满足上述任意一个条件数据就会被返回,例如只要[DLQI Name]不为空,无论State_ID是否为162/165/168都会进入结果集,不符合你的筛选要求。

修正方案

将State_ID多值匹配、字段非空判断两类条件分别用括号做逻辑分组,同时可以用IN关键字简化多值匹配的写法,修正后的SQL语句如下:

SELECT p.name as "patient", at.[RAPID3 Name], at.[DLQI Name], at.[HAQ-DI Name], p.ID, phy.Name, at.State_ID
FROM [ABV HUM Reporting].dbo.[Assessment Tool] as at
LEFT JOIN [ABV HUM Reporting].dbo.Patient as p ON p.[ID] = at.[Owner (Patient)_Patient_ID]
LEFT JOIN [abv hum reporting].dbo.[Physician] as phy ON phy.ID = p.Physician_ID
WHERE 
-- State_ID需为指定三个值之一
(at.State_ID IN (162, 165, 168))
AND 
-- 三个名称字段至少有一个不为空
(at.[RAPID3 Name] IS NOT NULL OR at.[DLQI Name] IS NOT NULL OR at.[HAQ-DI Name] IS NOT NULL)
ORDER BY at.date DESC 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:18:03