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
相关产品推荐
相关产品推荐

