SQLite中LIKE模糊查询仅返回首个匹配结果的问题排查
问题原因与修复方案
核心问题
你使用的=运算符仅支持匹配单个值,但你的子查询会返回多个符合条件的州缩写(比如mi%会返回MI、MN、MO)。SQL引擎遇到这种情况时,只会取子查询返回的第一条记录进行匹配,因此只能拿到第一个州的结果。
修复方法
方法1:用IN替代=(最直接)
将判断条件的=换成IN,IN支持匹配子查询返回的所有值集合:
SELECT * FROM people WHERE state_code IN ( SELECT state_abbrev FROM states WHERE state_name LIKE 'mi%' );
方法2:使用JOIN关联表(性能更优)
对于数据量较大的场景,直接关联两张表的性能比子查询更好,逻辑也更清晰:
SELECT p.* FROM people p JOIN states s ON p.state_code = s.state_abbrev WHERE s.state_name LIKE 'mi%';
为什么GROUP BY没用?
GROUP BY的作用是对结果进行分组聚合,你的子查询本身返回的就是唯一的state_abbrev记录,添加GROUP BY不会改变返回的结果数量,因此无法解决多值匹配的问题。
内容的提问来源于stack exchange,提问作者InvalidObjects
相关产品推荐
相关产品推荐

