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

如何在MariaDB中使用$.*通配符查询JSON列的任意键值?

在MariaDB中查询JSON多语言字段的正确方式

你的问题核心是MariaDB和MySQL对JSON路径$.*的处理逻辑存在差异:

  • MySQL里用name->'$.*'会返回所有JSON值组成的数组,转义后可直接用于模糊匹配;
  • 但MariaDB的JSON_VALUE函数仅支持提取单个标量值,使用$.*时它只会返回第一个非空的JSON值(比如示例里的Professional Association),所以你的模糊匹配自然查不到目标内容。

下面是两种可行的解决方法:

方法1:用JSON_TABLE拆分JSON值为行

把JSON中的多语言值拆成单独的行,只要任意一个语言值符合条件,就返回原表记录:

SELECT t.*
FROM some_table t
JOIN JSON_TABLE(
    t.name,
    '$.*' COLUMNS(
        lang_content VARCHAR(255) PATH '$'
    )
) AS lang_rows
WHERE LOWER(lang_content) LIKE LOWER('%Berufsverband%');

方法2:用JSON_SEARCH判断字符串是否存在

利用JSON_SEARCH函数查找目标字符串在JSON中的路径,只要路径存在就说明匹配成功:

SELECT *
FROM some_table
WHERE JSON_SEARCH(name, 'one', '%Berufsverband%', NULL, '$.*') IS NOT NULL;

这里的'one'参数表示找到第一个匹配的路径即可,若需要匹配所有符合条件的记录,也可换成'all',判断逻辑保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:15:37