mariadb 按另一个表中存储为JSON的值匹配列

c7rzv4ha  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(147)

我有一个包含JSON数据类型列的表,该列包含由另一个表的ID组成的JSON数组。我希望从另一个表返回匹配的行。
例如:

SELECT members
FROM clubhouse
WHERE id = 55;

它会传回:

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

我需要members表中ID为7、8和9的三行。
我在想这样的事情,虽然我知道这行不通:

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

我该怎么做?
注意,我需要一个查询中的所有行,这样我就可以进行基本的分页。如果有必要的话,我使用MariaDB。

blmhpbnm

blmhpbnm1#

我们可以尝试使用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

hi3rlvi2

hi3rlvi22#

您可以使用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

相关问题