SQLite中Where子句多条件下OR语句正确用法及数据筛选问题
问题原因
你的查询返回Negative数据是因为逻辑运算符优先级错误:SQL中AND优先级高于OR,原WHERE条件实际等价于:
(TEST_RESULT = 'POSITIVE' AND Code = 'U071') OR Code = 'Z20828' OR DIAGNOSIS_CD = 'Z20822' OR DIAGNOSIS_CD = 'R112' OR DIAGNOSIS_CD = 'R509'
这会让满足后面任意OR条件的记录(无论TEST_RESULT是否为Positive)都被选中,同时原语句还存在字段错误(误用DIAGNOSIS_CD)、包含需求外的Code值、不必要的GROUP BY导致数据丢失等问题。
修正后的SQL语句
CREATE TABLE table1 AS SELECT ID, TEST_RESULT, START_DATE, END_DATE, Code FROM table0 WHERE TEST_RESULT = 'Positive' AND Code IN ('U071', 'R12', 'Z515', 'R509') ORDER BY ID, START_DATE;
关键修正点
- 逻辑条件严谨性:用
AND同时绑定TEST_RESULT和Code的筛选规则,通过IN简化多Code值的判断,彻底避免OR优先级导致的逻辑漏洞 - 匹配需求字段与值:移除无关的
DIAGNOSIS_CD条件,只保留你指定的Code集合 - 保留目标记录:删除原语句中的
GROUP BY(它会合并同ID同START_DATE的记录,不符合你保留多条ID=2记录的需求),通过ORDER BY ID, START_DATE实现同一ID的记录合并为一组展示的要求
内容的提问来源于stack exchange,提问作者kora_num14
相关产品推荐
相关产品推荐

