如何使用并集从表中选择记录,以便第一个查询的结果将每个结果与第二个查询的相应结果连接在一起?

时间:2018-07-18 06:19:58

标签: mysql sql plsql

我有一个表,其中包含人名,他的父母和母亲的身份证以及他的年龄,我想编写一个查询,使其返回父母的姓名以及他/她最小的孩子的名字。桌子看起来像这样。

enter image description here

现在我已经编写了返回所需结果的查询。

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;

它返回这样的输出。

enter image description here

我希望它按此顺序显示输出。

|---------------------|------------------| | Name | min(b.Age) | |---------------------|------------------| | Adam | 30 | |---------------------|------------------| | Eve | 30 | |---------------------|------------------| | Child1 | 9 | |---------------------|------------------| | Child2 | 9 | |---------------------|------------------|

我希望查询执行并返回第一行父亲姓名和最小的孩子,然后返回第一行母亲姓名和最小的孩子,然后返回第二行父亲姓名和最小的孩子,然后第二行母亲姓名和最小的孩子等等。

谢谢...

1 个答案:

答案 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可以让我们更多地了解两个表之间的关联