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

标签 sql json mariadb

我有一个具有 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。

最佳答案

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

关于sql - 按另一个表中存储为 JSON 的值匹配列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72186774/

相关文章:

mysql - 如何在 SQL Case 函数中转换日期格式

c# - 在 map 上显示圆圈会显示拉长的椭圆形

ios - objective-c "callback"

JavaScript:获取对象的评估属性

mysql - 如何动态更新 SQL 字符串?

mysql - 无法使用 MAX_USER_CONNECTIONS 在 MariaDB 中创建用户

php - 基于两列的排名

sql - 如何在 SQL Server 中禁用表或触发器级别的触发器嵌套?

sql - Sequelize - 统计相关数据并按列分隔

json - 如何使用 GWT 解析 ASP.NET JSON 日期格式