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

已知table_b的ID,如何查询对应table_a的数据?MySQL JSON数组查询问题

解决方案

原SQL无效的原因是json_extract返回的是完整的JSON数组对象(如[1,2]),而IN子句需要离散的数值列表,无法直接匹配。以下是不同数据库环境下的可行方案:

MySQL 环境

方法1:使用JSON_TABLE拆分JSON数组(推荐,性能更优)

将JSON数组转换为行数据后关联查询:

SELECT a.*
FROM table_a a
INNER JOIN (
    SELECT j.id
    FROM table_b b
    INNER JOIN JSON_TABLE(
        b.table_a_ids,
        '$[*]' COLUMNS(id INT PATH '$')
    ) j
    WHERE b.id = 1
) t ON a.id = t.id;

方法2:使用JSON_CONTAINS判断包含关系

通过JSON函数直接判断table_a.id是否存在于目标数组中:

SELECT *
FROM table_a a
WHERE EXISTS (
    SELECT 1
    FROM table_b b
    WHERE b.id = 1
    AND JSON_CONTAINS(b.table_a_ids, CAST(a.id AS JSON))
);

PostgreSQL 环境

方法1:使用json_array_elements拆分JSON数组

将JSON数组拆分为单行数值后关联:

SELECT a.*
FROM table_b b
JOIN json_array_elements(b.table_a_ids) AS j(id)
ON b.id = 1
JOIN table_a a ON a.id = j.id::integer;

方法2:字符串处理拆分数组(兼容旧版本)

通过字符串转换拆分数组:

SELECT a.*
FROM table_a a
INNER JOIN (
    SELECT trim(unnest(string_to_array(b.table_a_ids::text, ',')), '[]')::integer AS id
    FROM table_b b
    WHERE b.id = 1
) t ON a.id = t.id;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:30:03