【问题标题】:Add select result to another select and create a json key将选择结果添加到另一个选择并创建一个 json 键
【发布时间】:2019-07-17 14:49:00
【问题描述】:

我创建了一个查询,它返回survey 表中不属于survey_completion 并且属于user_Id = 1 的所有调查:

我的功能查询是:

SELECT * 
FROM `survey` 
WHERE id NOT IN (
    SELECT `survey_id`
    FROM `survey_completion` 
    WHERE `user_id` = 1)

在此查询的结果中,我想选择表 question 中的每一行,其中行 question.survey_id = survey.id 并将其作为 JSON 响应中的 questionsList 键返回

我将此添加到查询中,但它不起作用:

AND (SELECT *
     FROM question
     WHERE question.survey_id = survey.idas) AS questionsList

MariaDB 在 AS 前缀上返回错误,我无法修复此问题

有人知道我该如何解决这个问题吗?

提供更多详情

我想要返回的查询是:

id: 1
name: 'test'
questionsList [
  {
    id: 1
    survey_id: 1
    question: 'How are you?'
  }
]

目前我的表survey 的行数为id, name,我的表question 的行数为id, survey_id, question, user_id

所以,我想附加到每个具有 survey_id 相同 ID 的问题 survey,将此列表作为 JSON 中的新嵌套列表获取并返回键名 questionsList

编辑:听说 UNION 会这样做,这对我来说有用,但两个表有不同的列吗?

【问题讨论】:

  • 没有看到查询,任何人都无能为力。
  • @GordonLinoff 抱歉,不得不编辑问题,因为 StackOverFlow 拒绝了我的问题,我不知道为什么
  • 你想得到什么?用户 1 未完成调查的所有问题?
  • @Arth 我正在尝试获取用户 1 未完成调查的所有问题,并将它们作为 JSON 中的嵌套键附加到查询结果(SELECT * 调查)。我正在编辑主帖,让您查看我的数据库表的架构
  • 您能否编辑您的帖子并在表格结构中添加一些数据:surveysurvey_completionquestion

标签: mysql sql mariadb


【解决方案1】:

在查询中构建 JSON 有点混乱,但我认为以下方法可行.. 并且每次调查返回一行

   SELECT JSON_OBJECT(
            "id", s.id,
            "name", s.name,
            "questionList", JSON_ARRAYAGG(
              JSON_OBJECT(
                "id", q.id,
                "question", q.question 
              )  
            )
          ) survey_object
     FROM survey s /** surveys **/

     JOIN question q /** with their questions */
       ON q.survey_id = s.id 

LEFT JOIN survey_completion sc /** with their completions by user 1 */ 
       ON sc.survey_id = s.id
      AND sc.user_id = 1

    WHERE sc.survey_id IS NULL /** where there are no completions by user 1 */  

 GROUP BY s.id /** grouped by survey */

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2017-11-30
    • 2015-02-15
    • 2021-03-27
    • 2014-02-12
    • 1970-01-01
    相关资源
    最近更新 更多