SQL如何根据“订单”字段对子行进行排序?
问题描述:
我猜这已经有一段时间了,因为我已经写了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
所以在接合时question
和question_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
迈克尔
答
您需要订购
- q.question_id
- qa.display_order
您可以在订单坚持尽可能多列的条款为您笏。
答
您需要在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
子句中使用逗号。
答
使用此查询。这将首先按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
PL试图通过增加条款,以q.question_id的顺序,即'以通过q.question_id,qa.display_order'重复每个'question_answer' –
返回'question'数据是次优的(因为您发送通过网络连接多次相同的数据)。考虑在批处理语句中执行两个查询,这些查询从回答中分别提出问题,但由于它是批处理语句,因此不会出现过多的交谈或延迟。 – Dai