mysql - SQL:组合两个查询结果,它们有一个共同的列,但每个都有自己特定的唯一列
问题描述
我正在努力寻找正确的方法来实现我想要实现的目标。所以这就是我所拥有的:
查询 A 给我以下结果:
培训编号 | 总通行证 |
---|---|
2 | 5 |
3 | 7 |
4 | 8 |
查询 B 给了我以下信息
培训编号 | 总失败 |
---|---|
2 | 3 |
6 | 7 |
7 | 9 |
我想要的结果如下:
培训编号 | 总通行证 | 总失败 |
---|---|---|
2 | 5 | 3 |
3 | 7 | 空值 |
4 | 8 | 空值 |
6 | 空值 | 7 |
7 | 空值 | 9 |
我尝试通过将左连接和右连接与联合相结合来模拟 MySQL 中的外部连接,但结果并不是我想要的,但我可以得到最接近的结果。也许我的主要问题是我不知道一个术语来描述我正在尝试做的这个操作到底是什么,所以我不知道要搜索什么。
解决方案
我会使用完整的外部连接。这是一个例子:
declare @p table (TrainingID int, totalPass int)
insert into @p
values
(2, 5)
,(3, 7)
,(4, 8)
declare @f table (TrainingID int, totalFail int)
insert into @f
values
(2, 3)
,(6, 7)
,(7, 9)
select TrainingID = COALESCE(p.TrainingID,f.TrainingID)
, totalPass = SUM(p.totalPass)
, totalFail = SUM(f.totalFail)
from @p p
full outer join @f f on p.TrainingID=f.TrainingID
group by COALESCE(p.TrainingID,f.TrainingID)
注意:COALESCE 是一个接受第一个非空值的函数。
Result:
TrainingID totalPass totalFail
2 5 3
3 7 NULL
4 8 NULL
6 NULL 7
7 NULL 9
推荐阅读
- android - 如何在不打开键盘的情况下突出显示 textinputlayout
- shell - 根据分支类型列出分支名称
- ruby-on-rails - Rails redis-server 抛出 maxmemory 错误。Redis::CommandError(使用内存>'maxmemory'时不允许使用OOM命令。):
- slack - 如何在所有直接消息渠道中发布临时消息?
- python - 在 Tensorflow 对象检测中评估预训练模型时出错 (tensorflow.python.framework.errors_impl.NotFoundError:)
- html - 如何将一个垂直图像与块中的另外 2 个垂直图像对齐
- c# - 如果特定端点发生错误,则不记录有效负载
- java - 如何使用 Gradle 推送到 Github 包注册表
- c# - 如何计算 ItemsControl 中选中的复选框
- javascript - 使用其他数组对对象数组进行排序