首页 > 解决方案 > 如何在 MariaDB 的“WHERE IN”子句中使用 JSON 数组

问题描述

我正在使用 MariaDB 10.2 版

我有一个 GUID 数组作为 JSON 存储在一个表中,我想从另一个表中选择 ID 与 JSON 数组中的任何 GUID 匹配的行。

group_table:
id       json_data
--       ---------
23       ["69CF6C989F3942889305249573D1A08D","00E534B77C9A481596BB84947A58F7A4"]

child_table:
child_id                            some_data
--------                            ---------
69CF6C989F3942889305249573D1A08D    child one
00E534B77C9A481596BB84947A58F7A4    child two

我想做的是:

SELECT * from child_table where child_id in (select json_data from group_table where id = 23)

标签: sqlarraysjsonmariadb

解决方案


修改 Pilosa 的答案我对其进行了修改以在 JSON 对象键上运行搜索。因此,如果我们将示例修改为如下所示:

store_table:
store_id       json_data
--------       ---------
23             {"stock": {"apple":"73", "banana":"pieces"}}
24             {"stock": {"pear":"28", "plum":"52"}}

fruit_table:
fruit                               pricing_metric
--------                            --------------
apple                               pounds
plum                                pounds
banana                              units
pear                                pounds
pineapple                           units

注意大括号 { }。我们可以根据 store_table 中的 json_data 从fruit_table 中选择pricing_metric,如下所示:

SELECT
    *
FROM
    fruit_table
WHERE
    JSON_SEARCH(
        (
            SELECT JSON_KEYS(json_data, '$.stock')
            FROM store_table 
            WHERE store_id = 23
        ),
        'one',
        HEX(user_pk)
    ) IS NOT NULL;

这将返回:

+----------------------------+
| fruit     | pricing_metric |
+----------------------------+
| apple     | pounds         |
| banana    | units          |
+----------------------------+

推荐阅读