You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite3如何查询与另一列名匹配的列值 等于匹配失效问题

问题根因

这不是SQLite的Bug,是引号语义的认知偏差导致的问题:
SQLite默认遵循SQL标准的引号规则:

  • 单引号'包裹的内容会被识别为字符串字面量
  • 双引号"包裹的内容会被识别为标识符(比如列名、表名)

你写的WHERE Name = "Value"语句里,"Value"被识别为表中定义的Value列,而非字符串Value,等价于WHERE Name = Value,实际是在比较同一行的Name列值和Value列值。你表中Name为Value的行Value列值是3,字符串Value和整数3比较不相等,所以没有返回结果。

为什么LIKE和子查询能生效

  • LIKE后的"Value%"包含%通配符,不可能是合法的标识符,SQLite会自动降级识别为字符串字面量,所以能正常匹配
  • 子查询SELECT Name FROM Test WHERE Value = 3返回的是Name列实际存储的字符串Value,IN比较的是两个字符串,所以匹配成功

解决方法

方法1(推荐,符合SQL标准)

字符串字面量统一用单引号包裹,修改查询语句为:

SELECT * FROM Test WHERE Name = 'Value';

方法2(不推荐,仅做兼容使用)

如果你一定要用双引号包裹字符串,可以执行开启双引号字符串支持的PRAGMA:

PRAGMA quoted_strings = ON;

开启后再执行原来的WHERE Name = "Value"就能正常返回结果,但这种写法不符合SQL通用标准,不建议在生产环境使用。

内容的提问来源于stack exchange,提问作者SFox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:18:05