MySQL 生成嵌套 JSON 对象

2024-01-09

我正在尝试从 Many_to_many 关系生成嵌套 JSON 对象。我正在尝试找到下面的 JSON 模式。

    [
  {
   "user_id": 151,
   "user_name": “Sam123”,
   "role_desc": [“Power_User”]
   
  },
  {
   "user_id": 152,
   "user_name": “John999”,
   "role_desc": ["Admin", "Power_User"]
   
  }
}

我尝试了如下组合 JSON 函数,但结果与我需要的不同。

SET @result = JSON_OBJECT('result,0,'data ',(SELECT 
              JSON_ARRAYAGG(JSON_OBJECT(             
              'user_id',user_tbl.user_id,
              ‘user_name’, user_tbl.user_name,
              'role_desc',app_role_tbl.role_desc)) 
              FROM user_tbl
INNER JOIN user_role ON user_tbl.user_id = user_role.user_id
INNER JOIN app_role_tbl ON user_role.role_id = app_role_tbl.role_id ));

结果带有重复的 user_id,每个 user_id 有两行,每个角色一行。

SET @result = JSON_OBJECT('result,0,'data ',(SELECT 
                         JSON_ARRAYAGG(JSON_OBJECT(                      
                         'user_id',user_tbl.user_id,
                         ‘user_name’, user_tbl.user_name,
              'role_desc',JSON_ARRAYAGG(app_role_tbl.role_desc))) 
              FROM user_tbl
INNER JOIN user_role ON user_tbl.user_id = user_role.user_id
INNER JOIN app_role_tbl ON user_role.role_id = app_role_tbl.role_id ));

使用此 SQL 查询和那些 JSON 函数,我收到错误

错误代码:1242。子查询返回超过 1 行。

我该如何解决这个问题?


你把事情想得太复杂了。您希望每个用户一个对象,在一个数组中具有多个角色,因此您必须按用户分组并形成该对象。如果您不想,处理没有角色的用户会有点棘手[null]。 (如果您正在进行内部联接,而不是左联接,则可以省略大小写并仅使用 json_arrayagg。)

select
  json_object(
    'user_id',user_tbl.user_id,
    'user_name',user_tbl.user_name,
    'role_desc',
      case
        when count(app_role_tbl.role_desc) then json_arrayagg(app_role_tbl.role_desc)
        else json_array()
      end
  ) user
from user_tbl
left join user_role using (user_id)
left join app_role_tbl using (role_id)
group by user_tbl.user_id

这会为每个用户生成一个 json 对象;如果您希望服务器将所有这些组合到一个 json 数组中,只需将其放入子查询中即可:

select json_arrayagg(user)
from (
  select
    json_object(
      'user_id',user_tbl.user_id,
      'user_name',user_tbl.user_name,
      'role_desc',
        case
          when count(app_role_tbl.role_desc) then json_arrayagg(app_role_tbl.role_desc)
          else json_array()
        end
    ) user
  from user_tbl
  left join user_role using (user_id)
  left join app_role_tbl using (role_id)
  group by user_tbl.user_id
) users;

fiddle https://dbfiddle.uk/mPatGrhS

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 生成嵌套 JSON 对象 的相关文章

  • 使用 ng-options 在 AngularJS 中使用 JSON 填充 select

    编辑 我的代码实际上确实有效 我只是一个有不相关问题的白痴 感谢大家的意见 所以我有一个 JSON 对象数组 格式如下 id id1 text text1 id id2 text text2 我想使用这些填充 AngularJS 选择字段
  • 按原样将 SQL 保存到 YAML

    我想以我自己的格式将 SQL 保存到 YAML 文件 如下所示 1 sql SELECT DISTINCT p id product p price AS price sp reduction AS discount FROM 我使用 YA
  • 在 azure Devops 管道中部署 SQL 时遇到错误

    我在 azure Devops 的发布管道中使用 sql DACPAC 类型的部署 但出现以下错误 我对 SQL 不了解 有什么建议吗 Publishing to database database name on server Serve
  • SQL Server中的列级与表级约束?

    A 列级 GO CREATE TABLE Products ProductID INT CONSTRAINT pk products pid PRIMARY KEY ProductName VARCHAR 25 GO b 表层 CREATE
  • 验证 sql/oracle 中的电子邮件/邮政编码字段

    对于以下方面的一些建议将不胜感激 是否可以通过 oracle 中的 sql 中的某种检查约束来验证电子邮件和邮政编码字段 或者我怀疑 pl sql 带有正则表达式的这种事情 Thanks 这是电子邮件地址的正则表达式语法 包括引号 a zA
  • 如何根据同一个表中的先前数据更新 SQL 表

    我有一张衡量学生表现的表格student在我的数据库中如下 ID TestDate PerformanceStatus PS 1 15 03 2016 0 1 01 04 2016 2 1 05 05 2016 1 1 07 06 2016
  • 拉拉维尔; “SQLSTATE[HY000] [2002] 连接被拒绝”

    我在 OSX 主机上设置了 homestead 2 0 并使用 Sequel Pro 我可以进行迁移并确认数据已在Sequel Pro中迁移 因此看起来数据库连接没有问题 但是 一旦我尝试从 Laravel 4 2 应用程序获取数据 它就无
  • 为 java 项目创建安装

    我创建了一个 java 项目 它使用数据库来检索 编辑和保存数据 我使用 Netbeans 完成了该项目 现在我想在该项目之外创建一个安装 为此 我想包含与项目一起安装的数据库 我用来连接数据库的代码是 Class forName com
  • Postgres LIMIT/OFFSET 奇怪的行为

    我正在使用 PostgreSQL 9 6 我有一个这样的查询 SELECT anon 1 id AS anon 1 id anon 1 is valid AS anon 1 is valid anon 1 first name AS ano
  • DbGeography 多边形到 JSON

    我将 DbGeography 多边形存储在数据库中 我的控制器从数据库获取多边形 我需要将它们转换为 JSON var polygons db Areas Where x gt x Type type Select x gt new Vie
  • SQL Server 批量插入 - “批量加载数据转换错误”

    bulk insert dbo A FROM d AData csv WITH FIELDTERMINATOR ROWTERMINATOR n 将批量数据插入数据库时 在检查可疑数据后 我遇到了无法解释的错误 消息 4867 16 级 状态
  • 如何比较行内的重叠值?

    我似乎对这个 SQL 查询有问题 SELECT FROM appts WHERE timeStart gt timeStart AND timeEnd lt timeEnd AND dayappt boatdate 时间格式为军用时间 物流
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • nvarchar 值“3001822585”的转换溢出了 int 列

    我使用以下方法将 Excel 文件导入到 SQL Server Excel 文件将所有值作为字符串 我可以导入文件 除了Barcode SalePrice and Price2 我收到错误 nvarchar 值 3001822585 条形码
  • Python MySQL 操作错误:1045,“用户 root@'localhost' 的访问被拒绝

    我试图通过以下方式从我的 python 程序访问数据库 db mysql connect host localhost user Max passwd maxkim db TESTDB cursor db cursor 但是 我在第一行代码
  • REGEXP_REPLACE - 仅当包含在 () 中时才从字符串中删除逗号

    我在 oracle 论坛网站找到了一个例子 输入字符串 a b c x y z a xx yy zz x WITH t AS SELECT a b c x y z a xx yy zz x col1 FROM dual SELECT t c
  • 创建日期范围表

    我正在编写一份需要显示每天值的报告 我有查询的开始日期和结束日期 但我希望避免丢失日期 以防表不包含特定日期的值 我正在考虑创建一个基本日期范围表 其中包含开始和结束之间的所有日期 然后将其与数据表左连接以显示每一天的值 我找到了一些适用于
  • 最近邻居的 Postgis SQL

    我正在尝试计算最近的邻居 为此 我需要传递一个参数来限制与邻居的最大距离 例如 半径1000米内最近的邻居是哪些 我做了以下事情 我用数据创建了表 id name latitude longitude 之后 我执行了以下查询 SELECT
  • 在 SQL 中按键组对行进行顺序编号?

    SQL中有没有办法按顺序添加行号按关键组 假设一个表包含任意 CODE NAME 元组 示例表 CODE NAME A Apple A Angel A Arizona B Bravo C Charlie C Cat D Dog D Dopp
  • 使用 md5 加密的 PHP 和 Mysql 查询出现问题

    我使用普通的 php mysql 插入查询并使用 md5 加密密码 这是插入查询 sql mysql query INSERT INTO user username password role approved values usernam

随机推荐

  • java中的try/catch块返回与finally子句[重复]

    这个问题在这里已经有答案了 给定 java 中的以下 try catch 块 try return catch SomeException e System out println e finally System out println
  • Django 或 mod_wsgi 在运行时会修改 sys.path 吗?

    我设置了 mod wsgi 并检查它工作正常 我还想出了一个简单的 django 项目 并使用以下命令检查了它是否正常工作 django admin py runserver settings mysite settings 但是 当我运行
  • jQuery() 在 jQuery.parseHTML() 结果中找不到元素

    我正在使用 QUnit 编写测试并使用 ajax 从本地运行的开发站点中提取 HTML 进行一些测试 add elements function location selector ajax location async false don
  • 在单页应用程序中创建临时 URL

    在我的基于反应的单页面应用程序中 我的页面分为两个窗格 左窗格 过滤器面板 右窗格 网格 包含通过应用过滤器的数据的表 总之 我有一个看起来与 amazon com 非常相似的应用程序 默认情况下 当用户在浏览器中点击应用程序的根端点 时
  • 删除断开连接 socket.io 上的对象

    我正在使用 Nodejs 和 Socket io 当客户端连接时 会创建新的 JavaScript 对象 这些物体会永远存在吗 当客户端断开连接时是否应该删除或删除它们 甚至可以移除一个物体吗 我知道删除是行不通的 谢谢 我想这更像是一个一
  • Django url templatetag (但不是 reverse() )错误:渲染时捕获 NoReverseMatch

    我正在尝试使用 url 模板标签 url all labs map 但是当我查看该页面时 我收到此错误 Caught NoReverseMatch while rendering Reverse for all labs map with
  • SQL Server 2016 时间戳数据类型

    我有以下问题 我正在使用一种归档软件 将其数据导出到 MS SQL 数据库 其中一列被指定为 Timestamp S 代表 unix 时间 它是一个 32 位整数 该数据库需要通过不同的报告软件进行查询 问题是报告软件要求其条目有一个名为
  • 如何通过代码获取android中的默认设备辅助应用程序?

    我的手机安装了两个语音搜索 Google 应用程序和 S voice 应用程序 默认应用程序是 S voice 应用程序 如下图所示 我的问题是 我们如何在Android 6 0中使用编程方式获得默认的语音应用程序 先感谢您 这就是我所做的
  • 中等信任文件 I/O 权限

    根据这个关于中等信任度的 MSDN 文章 http msdn microsoft com en us library ff648344 aspx paght000020 mediumtrustsummary 在中等信任度下 文件IO权限受到
  • 在 C++ 中,编写在 main() 之前执行的代码是否是一种好的形式?

    全局声明的类的构造函数在进入 main 之前被调用 虽然这可能会让代码的新读者感到困惑 因为这种情况很少发生 但这一定是一个坏主意吗 它不是一定这是一个坏主意 但通常是的 首先 它是全局数据 而全局数据通常是一件坏事 你拥有的全局状态越多
  • PDE Headless 构建的目标平台不起作用

    我目前正在尝试让我的无头 pde 构建工作 但我陷入了一个我不知道如何继续的点 问题是如何定义相关的目标平台来编译插件 我有一个包含以下调用的 build bat 全部在一行中 java jar D target eclipse plugi
  • asp.net mvc 2 向导

    有人有 ASP NET MVC 2 中向导控件的一些代码的链接吗 最好不使用会话 我想保留步骤之间的所有值
  • 将 Javascript 添加到自定义语言 - ACE 编辑器

    我正在使用 ACE 编辑器来使用 JSON 作为基础的自定义元语言 但我想在用户输入类似内容时添加Javascript 自定义 函数 参数 javascript 代码 这个想法是使用 JS 已经使用的样式来突出显示 javascript 代
  • 有AES加密解密的cocoa源代码吗?

    我正在寻找一些关于 AES 加密的可可代码 并且我做了一些谷歌搜索 我发现这个非常有用的链接 http iphonedevelopment blogspot com 2009 02 strong encryption for cocoa c
  • 为什么 void{} 不存在? [复制]

    这个问题在这里已经有答案了 我想知道为什么void 是一个纯右值void but void 不存在 请参阅以下答案 https stackoverflow com a 37708167 293195 https stackoverflow
  • Spring-Hibernate 应用程序:非法访问:此 Web 应用程序实例已停止

    我正在以正确的方式处理连接 1 我在我的应用程序中使用 Hibernate 连接池 每当我从池中获得连接时 我都会在完成事务后返回池 2 我已监视数据库以检查连接 我将 空闲连接 时间设置为 60 秒 我发现没有连接对象运行时间超过 60
  • select2 在选择值时提醒所选选项

    在 select2 中 如何提醒为多重选择选择的选项 这是我在选择 select2 选项时触发的代码 这只会提醒已选择的值 不是我选择的选项 我也不能这样做 var test list val alert test 因为它只会提醒已经选择的
  • 通过CSS改变图像的颜色

    我正在尝试使用 css 将图像更改为红色 这就是我到目前为止所拥有的 img webkit filter invert 90 filter invert 90 https jsfiddle net md1 https jsfiddle ne
  • 使用远程身份验证进行单元测试

    我在我的应用程序使用 Django 的默认身份验证时编写了一套测试 但现在我添加了 Atlassian Crowd 作为身份验证方法 这些测试现在失败了 主要是因为当我想运行时 Crowd 服务器不存在我在家进行的测试 每个应用程序的 se
  • MySQL 生成嵌套 JSON 对象

    我正在尝试从 Many to many 关系生成嵌套 JSON 对象 我正在尝试找到下面的 JSON 模式 user id 151 user name Sam123 role desc Power User user id 152 user