当前位置: 首页 > 知识库问答 >
问题:

使用MySQL JSON字段连接表

岑俊明
2023-03-14

我有一个存储ID列表的json字段(这里不是我知道的最佳实践),我想知道是否可以在这个json字段上使用do操作并在SQL中使用它们。

CREATE TABLE user (
    user_id INT,
    user_name VARCHAR(50),
    user_groups JSON
);

CREATE TABLE user_group (
    user_group_id INT,
    group_name VARCHAR(50)
);

INSERT INTO user_group (user_group_id, group_name) VALUES (1, 'Group A');
INSERT INTO user_group (user_group_id, group_name) VALUES (2, 'Group B');
INSERT INTO user_group (user_group_id, group_name) VALUES (3, 'Group C');

INSERT INTO user (user_id, user_name, user_groups) VALUES (101, 'John', '[1,3]');
user_id | user_name | user_group_id | group_name|
-------------------------------------------------
101     | John      | 1             | Group A
101     | John      | 3             | Group C
 SELECT 
       u.user_id, 
       u.user_name, 
       g.user_group_id
       g.group_name
   FROM users u
   LEFT JOIN user_group g on g.user_group_id in some_json_function?(u.user_groups)

如果问题不清楚请告诉我。

共有1个答案

徐洛华
2023-03-14

借助Feras的评论和一些摆弄:

  SELECT 
       u.user_id, 
       u.user_name, 
       g.user_group_id,
       g.group_name
   FROM user u
   LEFT JOIN user_group g on JSON_CONTAINS(u.user_groups, CAST(g.user_group_id as JSON), '$')

这似乎有用,如果有更好的方法,让我知道。

 类似资料:
  • 问题内容: 我有一个存储ID列表的JSON字段(我不知道这是最佳实践),我想知道是否可以在此JSON字段上使用do操作并在sql中使用它们。 以下是我要实现的虚拟示例,是否可以实现? 有了以上数据,我想构建一个查询,使我得到如下结果: 我在想以下一些伪风格的SQL,尽管我仍然不知道这是否可行,或者我将使用mysql提供的JSON函数实现此目的 如果问题不清楚,请告诉我。 问题答案: 借助Feras

  • 我的类使用@service,而bean已经自动连线,所以我不明白为什么会出现这个错误。

  • 问题内容: 我还是Spring MVC的新手,在构建测试项目时,我从Tomcat日志中得到了以下消息: 我有两个接口,分别用于用户和管理员: 这是AdminServiceImpl: 这是applicationContext.xml 请告诉我这个bean名称是什么问题,我知道这是AOP问题: 我该如何解决? 我在控制器中使用AdminServiceImpl: 问题答案: 您必须在代码中的某处像这样自

  • 问题内容: 我有一个包含5个整数ID的表,并想添加一列以接受这些ID,对其进行排序并以类似于以下内容的方式将它们连接起来。 是否有使订购更快更轻松的功能?上帝禁止我必须手动编写订单。 问题答案: 您也可以使用(在线演示)

  • 问题内容: 我有2张桌子。为了简化: 表1,用户: userId int,userName nvarchar(50) 表2消息: msgId int,msgFrom int,msgTo int … msg1和msg2都包含userId。现在,我想获取所有消息,但是我想要用户名而不是msgFrom。我知道该怎么办: 一切正常,花花公子。获取用户名而不是msgTo的方法相同。现在的问题是,如何在同一调

  • 问题内容: 我在Linux上使用 --skip-networking 选项使用MySQL 。 尝试使用JDBC将基于J2EE的应用程序(使用servlet)连接到MySQL数据库。 使用 禁用* 了 --skip-networking 选项的MySQL时,我以以下方式连接到数据库: * 启用 --skip-networking 选项后,我尝试将其连接为: 但这似乎不起作用,当我尝试连接到应用程序中