2017-07-18 159 views
2

我猜这已经有一段时间了,因为我已经写了SQL,而且我被这个看似平凡的要求所困惑:我想一起加入一个父表和一个子表,并且通过名为“order”的字段来排列子列子表。SQL如何根据“订单”字段对子行进行排序?

假设你有一个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

迈克尔

+0

PL试图通过增加条款,以q.question_id的顺序,即'以通过q.question_id,qa.display_order'重复每个'question_answer' –

+0

返回'question'数据是次优的(因为您发送通过网络连接多次相同的数据)。考虑在批处理语句中执行两个查询,这些查询从回答中分别提出问题,但由于它是批处理语句,因此不会出现过多的交谈或延迟。 – Dai

回答

4

订货只是每组答案的问题, order by q.question_id, qa.display_order

+0

该死的,你打了我20秒。猜猜下次我必须加快速度:P – Jacobm001

0

您需要订购

  1. q.question_id
  2. qa.display_order

您可以在订单坚持尽可能多列的条款为您笏。

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

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 
相关问题