按在另一个 table 中存储为 JSON 的值匹配列

Match columns by values stored as JSON in another table

我有一个 table,它有一个 JSON 数据类型列,其中包含 JSON 数组,其中包含另一个 table 的 ID。我想 return 匹配来自其他 table.

的行

例如:

SELECT members
FROM clubhouse
WHERE id = 55;

它 returns:

["7","8","9"]

我想要 members table 中 ID 为 7、8 和 9 的三行。

我在想这样的事情,虽然我知道它行不通:

SELECT *
FROM members
WHERE id = [FOR EACH JSON(SELECT members FROM clubhouse WHERE id=55)];

我该怎么做?

请注意,我需要来自单个查询的所有行,以便我可以进行基本分页。如果重要的话,我正在使用 MariaDB。

我们可以尝试使用 json_contains 函数通过子查询过滤 JSON 值。

SELECT *
FROM members m
WHERE EXISTS (
    SELECT 1
    FROM clubhouse c
    WHERE JSON_CONTAINS(c.members, CONCAT('"', m.id, '"'))
    AND c.id = 55
)

sqlfidde

您可以使用 json_table 函数(需要 MariaDB 10.6 或更高版本)将 json 转换为行,然后加入:

SELECT members.*
FROM clubhouse
CROSS JOIN json_table(clubhouse.members, '$[*]' columns(
    id INT PATH '$'
)) AS j
INNER JOIN members ON j.id = members.id
WHERE clubhouse.id = 55