我有一个具有JSON值列的表(TABLE_A),其中一些数据在此JSON中,其中包括另一个表中的id
S列表。
该表的简化版本看起来像这样:
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
)