我有一个具有JSON值列的表(TABLE_A),其中一些数据在此JSON中,其中包括另一个表中的idS列表。 该表的简化版本看起来像这样:

id json
10 {"ids": [1,2,3,4,5]}

现在,我想从另一个表(TABLE_B)中选择这些ID。我怎样才能做到这一点?

SELECT * FROM TABLE_B WHERE `id` IN (SELECT TABLE_A.json.ids FROM TABLE_A WHERE `id` = 10)

我需要两个子征服方法(如伪代码上方),也需要加入方法,但我不知道该怎么办。

分析解答

由于您没有提及您正在使用的特定技术,因此可以根据标签来使用以下查询

  • mysql
SELECT * 
FROM TABLE_B
WHERE id IN (
    SELECT id
    FROM TABLE_A,
         JSON_TABLE(
             JSON_EXTRACT(json, '$.ids'),
             '$[*]' COLUMNS (id INT PATH '$')
         ) AS jt
    WHERE TABLE_A.id = 10
)

  • Postgresql
SELECT * 
FROM TABLE_B
WHERE id IN (
    SELECT json_array_elements_text((json->'ids')::json)::integer
    FROM TABLE_A
    WHERE id = 10
)
  • sqlite
SELECT * 
FROM TABLE_B
WHERE id IN (
    SELECT value
    FROM TABLE_A, json_each(TABLE_A.json, '$.ids')
    WHERE TABLE_A.id = 10
)