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

柱状图同月数据获取异常及SQL筛选指定月份阴性患者数据错误的解决方法

解决SQL查询中月份筛选失效的问题

这是个典型的SQL逻辑运算符优先级踩坑问题,我来帮你理清问题并修正语句:

问题根源

SQL里AND的优先级默认高于OR,所以你原来的查询语句实际执行的逻辑是:

(指定月份且tests表结果为阴性) 或者 (recovery_tests表的second_test为阴性)

这就导致只要second_test是Negative的记录,不管date的月份是什么都会被筛选出来——这就是那条2020-04-09的记录始终被查到的原因。

修正后的SQL语句

你需要用括号把OR的两个条件包裹起来,强制让它们先做逻辑判断,再和月份条件做AND运算,确保只有指定月份下的阴性记录被保留:

SELECT * 
FROM patient 
NATURAL JOIN tests 
LEFT JOIN recovery_tests ON tests.patient_id = recovery_tests.patient_id 
WHERE MONTH(date) = '1' 
  AND (test_results = 'Negative' OR second_test = 'Negative');

额外建议

  • 尽量避免使用NATURAL JOIN,它会自动按表中同名字段关联,一旦表结构变更(比如新增同名但无关的字段),很容易出现意料之外的关联结果。建议显式写出关联条件,比如patient.patient_id = tests.patient_id。
  • 如果date字段是日期类型,直接用MONTH(date)返回的是数字,也可以不用加引号,写成MONTH(date) = 1更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 12:52:38