连接两个查询的结果

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 表达式返回来自t1date,否则返回null;因此,降序排列会放入t1 rows first, ordered by descending dates (rows fromt2getnull`,按降序排列,排在最后)

第二个排序标准对剩余的行进行排序(即来自t2 by descendingrating 的行`

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

【讨论】:

以上是关于连接两个查询的结果的主要内容,如果未能解决你的问题,请参考以下文章

为啥在两个类型转换字段上连接的 Access 查询中会出现“#Error”的结果?

MySQL连接两个不相关查询的结果

使用 LINQ 或其他模块在 C# 中连接两个查询的结果

连接两表查询结果的SQL语句

连接查询

MySQL连接查询(多表查询)