柱状图同月数据获取异常及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
相关产品推荐
相关产品推荐

