SQL如何根据“排序”对子行进行排序;订单“;领域

SQL如何根据“排序”对子行进行排序;订单“;领域,sql,Sql,我想我写SQL已经有一段时间了,我被这个看似微不足道的要求难住了:我想将父表和子表连接在一起,并通过子表中名为“order”的字段对子列进行排序 假设您有一个问题表和一个问题_答案表: question ( question_id, question_text ) question_answer ( answer_id, question_id, answer_text, display_order ) 因此,每个问题都可以有多个答案,每个答案都有一个显示顺序字段 以下是一些数据的外观: qu

我想我写SQL已经有一段时间了,我被这个看似微不足道的要求难住了:我想将父表和子表连接在一起,并通过子表中名为“order”的字段对子列进行排序

假设您有一个
问题
表和一个
问题_答案
表:

question ( question_id, question_text )
question_answer ( answer_id, question_id, answer_text, 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
因此,当加入
问题
问题/答案
时,所需的结果将显示问题及其每个答案,但这些答案将按给定的
显示顺序
显示在问题答案中

一个简单的查询,例如

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\u顺序对结果集中的所有行进行排序
,而不是仅按问题的
display\u顺序对每组答案进行排序


Michael

按q排序。问题id,qa。显示顺序

您需要按

  • q、 问题编号
  • 显示订单

  • 您可以在order by子句中粘贴任意多的列。

    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
    子句中使用逗号。

    使用此查询。这将首先按问题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 
    

    请尝试将q.question\u id添加到order by子句中,即,
    order by q.question\u id,qa.display\u order
    返回每个
    question\u答案重复的
    question
    数据是次优的(因为您通过网络连接多次发送相同的数据)。考虑在批语句中执行两个查询,这些语句分别从答案中得到问题,但是因为它是批语句,不会有太多的颤动或延迟。该死,你打了我20秒。我想下次我得快点了:P