SQL如何根据“订单”字段对子行进行排序?

时间:2017-07-18 01:42:28

标签: sql

我想已经有一段时间了,因为我写了SQL,我对这个看似微不足道的要求感到困惑:我想要将父表和子表连接在一起,并通过名为“order”的字段对子列进行排序儿童桌。

假设您有一个question表和一个question_answer表:

question ( question_id, question_text )
question_answer ( answer_id, question_id, answer_text, display_order )

因此,对于每个问题,可以有多个答案,每个答案都有一个display_order字段。

以下是一些数据的外观:

question
--------
1, "How much milk should I add""
2, "About how fast was he going?"

question_answer
---------------

1, 1, "A little", 0
2, 1, "Moderate", 1
3, 1, "A lot", 2
4, 2, "Pretty slow", 0
5, 2, "Average", 1
6, 2, "Like a bat out of hell", 2

因此,加入questionquestion_answer时所需的结果会显示问题及其每个答案,但这些答案将在display_order中给出,在问题的答案中

一个简单的查询,例如

select
    q.question_text,
    qa.answer_text
from
    question q,
    question_answer qa
where
    q.question_id = qa.question_id
order by
    qa.display_order 

display_order对结果集中的所有行进行排序,而不是按display_order

排序问题的每组答案

迈克尔

4 个答案:

答案 0 :(得分:4)

order by q.question_id, qa.display_order

答案 1 :(得分:2)

order by中需要两个键:

select q.question_text, qa.answer_text
from question q join
     question_answer qa
     on q.question_id = qa.question_id
order by q.question_id, qa.display_order;

请注意,您应该学会使用正确的,明确的JOIN语法。简单的规则:从不FROM子句中使用逗号。

答案 2 :(得分:0)

您需要按

订购
  1. q.question_id
  2. qa.display_order
  3. 您可以按照自己的顺序在order by子句中添加尽可能多的列。

答案 3 :(得分:0)

使用此查询。这将首先按question_id排序,然后按显示顺序排序。

select
  q.question_text,
  qa.answer_text
from
  question q, question_answer qa
where
  q.question_id = qa.question_id
order by
  q.question_id, qa.display_order