SQLite中LIKE与IN运算符对比:如何用LIKE实现IN的查询效果?
用LIKE替代IN实现多匹配查询的问题
我想用LIKE运算符实现和IN运算符一样的查询结果,但之前写的LIKE语句只返回第一个匹配项(包含Success的结果)。目前已经通过IN语句得到了预期结果,想确认能不能用LIKE达成同样效果。
两段对比SQL代码
错误的LIKE写法(仅返回含Success的结果)
%%sql SELECT Mission_Outcome, count(Mission_Outcome) as Count FROM SPACEXTBL WHERE Mission_Outcome LIKE '%Success%' or '%Failure%' GROUP BY Mission_Outcome ORDER BY Count DESC;
可用的IN写法(得到预期结果)
%%sql SELECT Mission_Outcome, count(Mission_Outcome) as Count FROM SPACEXTBL WHERE Mission_Outcome IN ('Success', 'Failure (in flight)', 'Success (payload status unclear)') GROUP BY Mission_Outcome ORDER BY Count DESC;
问题原因及修正方案
原来的LIKE写法有语法错误:or '%Failure%'没有指定匹配的字段,数据库会把这个字符串常量当作布尔值(非空字符串判定为真),但实际并没有让Mission_Outcome去匹配Failure相关内容,所以只会返回符合第一个LIKE '%Success%'的结果。
要实现和IN一样的效果,需要给每个LIKE条件都指定字段,修正后的SQL如下:
%%sql SELECT Mission_Outcome, count(Mission_Outcome) as Count FROM SPACEXTBL WHERE Mission_Outcome LIKE '%Success%' OR Mission_Outcome LIKE '%Failure%' GROUP BY Mission_Outcome ORDER BY Count DESC;
这样写后,所有包含Success或Failure的Mission_Outcome都会被筛选出来,和IN语句指定的三个值的匹配结果完全一致。
内容的提问来源于stack exchange,提问作者CartmanBrah
相关产品推荐
相关产品推荐

