按在另一个 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
)
您可以使用 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
我有一个 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
)
您可以使用 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