You need to enable JavaScript to run this app. 如何在Postgres JSON查询的WHERE子句中正确使用逻辑运算符
优惠活动
大模型
产品
解决方案
定价
更多

如何在Postgres JSON查询的WHERE子句中正确使用逻辑运算符

问题原因

你的查询逻辑运算符本身没有问题,错误出在JSON字段属性的取值写法:
你写的'paying' = 'true'是将两个字符串常量直接做等值判断,字符串'paying'永远不可能等于'true',所以这个判断条件的结果永远为false。

  • 第一个OR查询中,右侧条件恒为假,所以最终只返回满足左侧info ->> 'name' = 'Faber'的id=3的记录,和你看到的结果一致
  • 第二个AND查询中,右侧条件恒为假,所以整个WHERE条件永远不成立,返回空结果

正确写法

所有从JSON类型字段中提取属性的操作,都需要显式指定字段和取值运算符,不能直接写属性名作为判断变量。你需要的两个查询正确写法如下:

查询「名字为Faber 或 付费状态为true」的记录

select * from sales where info ->> 'name' = 'Faber' OR info ->> 'paying' = 'true';

执行后会返回id=1(Alice,付费状态为true)、id=3(Faber)两条记录。

查询「名字为Alice 且 付费状态为true」的记录

select * from sales where info ->> 'name' = 'Alice' AND info ->> 'paying' = 'true';

执行后会返回id=1的符合条件的记录。

扩展说明

如果paying属性在JSON中存储的是布尔类型,也可以用类型转换的写法做判断,语义更清晰,也避免字符串匹配可能出现的大小写问题:

select * from sales where info ->> 'name' = 'Alice' AND (info -> 'paying')::boolean = true;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 14:15:01