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

如何在SQL查询的WHERE子句中过滤JSON列的ProductName属性?

在SQL的WHERE条件中过滤JSON列里的数组对象属性(ProductName)

针对不同主流数据库,提供对应的实现方案:

MySQL(8.0+)

方法1:用JSON_TABLE展开数组行进行匹配

适合需要精准匹配或复杂条件过滤的场景,通过将JSON数组转成临时表行来关联查询:

SELECT *
FROM your_table
WHERE EXISTS (
    SELECT 1
    FROM JSON_TABLE(
        your_table.data->'$.Product',
        '$[*]' COLUMNS (
            ProductName VARCHAR(255) PATH '$.ProductName'
        )
    ) AS products
    WHERE products.ProductName = 'TestName'
);

方法2:用JSON_SEARCH快速判断存在性

如果只是检查是否存在指定ProductName,用这个更简洁:

SELECT *
FROM your_table
WHERE JSON_SEARCH(data->'$.Product[*].ProductName', 'one', 'TestName') IS NOT NULL;

JSON_SEARCH会返回匹配值的JSON路径,不为空即说明存在目标ProductName。

PostgreSQL

方法1:展开数组行匹配(兼容json/jsonb类型)

SELECT *
FROM your_table t
WHERE EXISTS (
    SELECT 1
    FROM json_array_elements(t.data->'Product') AS prod
    WHERE (prod->>'ProductName') = 'TestName'
);

如果是jsonb类型,也可以用更高效的包含操作符:

SELECT *
FROM your_table
WHERE data @> '{"Product": [{"ProductName": "TestName"}]}';

SQL Server

用OPENJSON将JSON数组转成关系表行,再进行条件过滤:

SELECT *
FROM your_table t
WHERE EXISTS (
    SELECT 1
    FROM OPENJSON(t.data, '$.Product')
    WITH (
        ProductName VARCHAR(255) '$.ProductName'
    ) AS prod
    WHERE prod.ProductName = 'TestName'
);

额外注意事项

  • 如果数据库支持,优先使用jsonb(PostgreSQL)或优化过的JSON类型,比原生json类型查询性能更高。
  • 若需要模糊匹配,把等于条件换成LIKE即可,比如products.ProductName LIKE '%Test%'。
  • 替换示例中的your_table为你实际的数据表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:55:55