SQLite如何用单条语句实现对存在的table或table_v2的条件查询
思路验证结果
- 正则匹配表名不可行:SQLite静态查询语句不支持动态替换表名,即使通过正则匹配到存在的表名,也无法直接代入到SELECT的表名位置执行查询。
- 同时执行两条语句忽略错误不可行:SQL语句执行前会先做语法和对象存在性校验,只要其中一张表不存在,整句会直接抛出错误,不会执行后续逻辑也无法忽略单条错误。
可行实现方案
你可以通过EXISTS存在性判断 + UNION ALL拼接结果的方式实现需求,单条语句即可完成:
SELECT * FROM `table` WHERE EXISTS ( SELECT 1 FROM sqlite_master WHERE type='table' AND name='table' ) UNION ALL SELECT * FROM `table_v2` WHERE NOT EXISTS ( SELECT 1 FROM sqlite_master WHERE type='table' AND name='table' );
方案说明
- 前提要求:
table和table_v2的表结构(字段数量、字段顺序、字段类型)完全一致,否则会触发UNION ALL的结构不匹配错误,匹配你“对两张表执行相同SELECT查询”的使用前提。 - 执行逻辑:当
table存在时,前半段查询返回全表数据、后半段查询返回空,最终结果就是table的全部数据;当table不存在时,前半段返回空、后半段返回table_v2的全表数据,完全符合你需要的分支逻辑。
内容的提问来源于stack exchange,提问作者user3428723
相关产品推荐
相关产品推荐

