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

如何在数据库JSON字段中查询含/不含指定键值对的记录?

查询JSON字段中存在/不存在特定键的记录方法

不同数据库对JSON字段的查询语法有所差异,以下是主流数据库的实现方案:

MySQL

检查键存在

使用JSON_CONTAINS_PATH()函数,'one'表示只要目标键存在即可(若要检查多个键都存在,改用'all'):

SELECT * FROM `foo_db`.`foo_table`
WHERE JSON_CONTAINS_PATH(`foo_field`, 'one', '$.bar_key') = 1;

检查键不存在

对存在判断取反,或直接判断返回值为0:

SELECT * FROM `foo_db`.`foo_table`
WHERE JSON_CONTAINS_PATH(`foo_field`, 'one', '$.bar_key') = 0;

-- 或使用NOT取反
SELECT * FROM `foo_db`.`foo_table`
WHERE NOT JSON_CONTAINS_PATH(`foo_field`, 'one', '$.bar_key');

PostgreSQL

PostgreSQL的jsonb类型(推荐使用)支持直接用操作符判断:

检查键存在

使用?操作符:

SELECT * FROM foo_db.foo_table
WHERE foo_field ? 'bar_key';

检查键不存在

用NOT取反,或使用!操作符(部分版本支持):

SELECT * FROM foo_db.foo_table
WHERE NOT (foo_field ? 'bar_key');

-- 或
SELECT * FROM foo_db.foo_table
WHERE foo_field ! 'bar_key';

如果是多层嵌套的键(如parent.bar_key),可使用jsonb_path_exists():

SELECT * FROM foo_db.foo_table
WHERE jsonb_path_exists(foo_field, '$.parent.bar_key');

SQL Server

通过判断JSON_QUERY()的返回值是否为NULL来识别键是否存在:

检查键存在

SELECT * FROM foo_db.foo_table
WHERE JSON_QUERY(foo_field, '$.bar_key') IS NOT NULL;

检查键不存在

SELECT * FROM foo_db.foo_table
WHERE JSON_QUERY(foo_field, '$.bar_key') IS NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:22:05