使用Ruby on Rails Active Record的SQL多表嵌套组

时间:2018-11-08 15:28:04

标签: sql ruby-on-rails postgresql activerecord

型号:

一个SELECT IF((SELECT COUNT(*) FROM dataset.table) > 0, 'Okay', ERROR('No rows in the table')) survey,每个都有一个survey_answers和一个answer

question属于question

示例:

category具有Survey_answersurvey_idanswer_id

question_id具有question

我将category_idRuby on Rails一起使用

使用Active Record,并从调查开始,如何进行以下分组:

SQL

示例输出:

{ category => questions => answers }

我了解如何进行分组,但不了解如何使用{[ category_one_record, [question_1,[answer_1, answer_2]], [question_2,[answer_3, answer_4]], category_two_record, [question_3,[answer_5, answer_6]], [question_4,[answer_7, answer_8]], category_three_record, ... ]} 进行嵌套分组

2 个答案:

答案 0 :(得分:1)

我相信您正在以非SQL方式考虑这一点。

SQL是表格形式的,返回此类信息时,通常会接受重复而不是看起来会生成嵌套的数据结构(例如可以使用JSON,XML等)。

您不 出现 ,不需要任何实际的聚集GROUP BY的用途)。相反,您指的是一种使相关记录彼此相邻的方法。

只需将数据联接然后排序。

您的原始帖子在表结构上不清楚,所以这是我的意思的一个非常粗糙的例子...

SELECT
  survey.name   AS survey_name,
  category.name AS category_name,
  question.text AS question_text,
  answer.text   AS answer_text
FROM
  survey
INNER JOIN
  question
    ON question.survey_id = survey.id
INNER JOIN
  category
    ON category.id = question.category_id
INNER JOIN
  answer
    ON answer.question_id = question.id
ORDER BY
  survey.name,
  category.name,
  question.text,
  answer.text

这样的查询可能会返回一个如下所示的记录集...

 survey_name | category_name | question_text | answer_text
-------------+---------------+---------------+-------------
 survey_1    | category_1    | question_1    | answer_1
 survey_1    | category_1    | question_1    | answer_2
 survey_1    | category_1    | question_2    | answer_3
 survey_1    | category_1    | question_2    | answer_4
 survey_1    | category_2    | question_3    | answer_5

管状。不嵌套。

答案 1 :(得分:0)

如果您有自然连接可用,即使您不知道它如何工作,几乎也可以将表配对,就像这样:

select * from Survey_answer 
               natural join question 
               natural join category 
               where category_id = 1

如果没有此选项,则需要指定连接点,例如,如果是右侧,左侧或内部,则指定该连接点:

select * from Survey_answer 
               inner join question on Survey_answer.answer_id like  question.answer_id
               where Survey_answer.category_id = 1

您可以在此处了解更多信息:https://www.w3schools.com/sql/sql_join.asp