SQL查询报mismatched input 'IN' expecting {<EOF>, ';'}错误求助
SQL报错排查方案
该错误属于SQL语法解析错误,解析器扫描到IN关键字时,按照前文语句结构判断当前位置应为语句结束标识(
- 检查语句前后是否存在残留非法字符:复制粘贴SQL时很容易带入未删除的半截SQL片段、不可见特殊字符(如零宽空格、异常换行符),可先将整段SQL复制到纯文本编辑器中清空格式后再运行。
- 补充语句结束符:若你使用的SQL执行环境要求单条语句必须以分号结尾,直接在语句末尾添加
;即可,修改后的参考语句如下:
SELECT * FROM drug_exposure WHERE drug_concept_id IN (1111,1112,95768,1145689) OR drug_source_concept_id IN (1111,1112,95768,1145689);
- 检查执行环境兼容性:部分低版本数据库或小众SQL引擎对多个
OR连接的IN子句支持存在缺陷,可改写为兼容度更高的判断逻辑:
SELECT * FROM drug_exposure WHERE EXISTS ( SELECT 1 FROM (VALUES (1111),(1112),(95768),(1145689)) AS target_ids(id) WHERE target_ids.id = drug_concept_id OR target_ids.id = drug_source_concept_id );
- 检查是否多语句未分隔:若你是将多条SQL放在同一次执行请求中,需要确保每条语句之间用分号分隔,避免前一条语句未结束就拼接当前语句的情况。
内容的提问来源于stack exchange,提问作者Stephen Lee
相关产品推荐
相关产品推荐

