我有一个表,其中包含人名,他的父母和母亲的身份证以及他的年龄,我想编写一个查询,使其返回父母的姓名以及他/她最小的孩子的名字。桌子看起来像这样。
现在我已经编写了返回所需结果的查询。
select a.Name, min(b.Age) from People a, People b where a.PersonID = b.Father group by a.Name
union
select a.Name, min(b.Age) from People a, People b where a.PersonID = b.Mother group by a.Name;
它返回这样的输出。
我希望它按此顺序显示输出。
|---------------------|------------------|
| Name | min(b.Age) |
|---------------------|------------------|
| Adam | 30 |
|---------------------|------------------|
| Eve | 30 |
|---------------------|------------------|
| Child1 | 9 |
|---------------------|------------------|
| Child2 | 9 |
|---------------------|------------------|
我希望查询执行并返回第一行父亲姓名和最小的孩子,然后返回第一行母亲姓名和最小的孩子,然后返回第二行父亲姓名和最小的孩子,然后第二行母亲姓名和最小的孩子等等。
谢谢...
答案 0 :(得分:1)
编写一个子查询并给min(b.Age)
命名,然后使用多个order by
select * from
(
select a.Name, min(b.Age) age from People a INNER JOIN People b ON a.PersonID = b.Father group by a.Name
union
select a.Name, min(b.Age) from People a INNER JOIN People b ON a.PersonID = b.Mother group by a.Name;
)t
order by name,age desc
注意:
避免使用逗号,
连接表,而使用JOIN
而不是逗号,因为Join
可以让我们更多地了解两个表之间的关联