连接两个查询的结果
Posted
技术标签:
【中文标题】连接两个查询的结果【英文标题】:Concatenate results of two queries 【发布时间】:2020-04-25 21:26:20 【问题描述】:表 1:选定人员
id|name|date|rating
表 2:人员
id|name|date|rating
我想构建一个查询,该查询将返回所有选定的人员(按日期 desc 从table 1
排序)和所有从table 2
排序的人员按 desc 顺序排序。
如果表 1 中有 3 人,表 2 中有 4 人,则查询应返回按日期排序的前 3 个选定人员作为前 3 个条目,然后返回 4 个按等级排序的人员条目。 如何使用 sql 实现这一点?
【问题讨论】:
用您正在使用的数据库标记您的问题。样本数据和期望的结果会有所帮助。 【参考方案1】:这是一种适用于大多数数据库的方法:
select id, name, date, rating
from ((select id, name, date, rating, 1 as which
from table1
) union all
(select id, name, date, rating, 2 as which
from table1
)
) t
order by which,
(case when which = 1 then date end),
rating
【讨论】:
【参考方案2】:我认为你想要:
select id, name, date, rating
from (
select id, name, date, rating, 't1' which from table1
union all
select id, name, date, rating, 't2' which from table2
)
order by
case when which = 't1' then date end desc,
rating end desc
子查询使用union all
从两个表中进行选择,并附加一列指示每条记录来自哪个表。然后,外部查询进行条件排序:
case
表达式返回来自t1
的date
,否则返回null
;因此,降序排列会放入t1 rows first, ordered by descending dates (rows from
t2get
null`,按降序排列,排在最后)
第二个排序标准对剩余的行进行排序(即来自t2 by descending
rating 的行`
在 mysql 中,这可以缩短一点:
(
select id, name, date, rating, 't1' which from table1
union all
select id, name, date, rating, 't2' which from table2
)
order by
case when which = 't1' then date end desc,
rating end desc
【讨论】:
【参考方案3】:这是 Union 的一个用例。尝试以下查询:
SELECT id, name, date, rating FROM table1
ORDER BY date DESC
UNION
SELECT id, name, date, rating FROM table2
ORDER BY rating DESC
【讨论】:
以上是关于连接两个查询的结果的主要内容,如果未能解决你的问题,请参考以下文章