mysql - UNION 仅基于一列
问题描述
我想基于单个列合并两个表。
假设,我有一个名为 t1 的表:
Id | Name
------------
1 | A
2 | B
3 | C
还有一个名为 t2 的表:
Id | Name
------------
1 | B
3 | B
5 | B
我想像这样联合它们:
SELECT * FROM T1
UNION
SELECT * FROM T2
BASED ON ID
我期待这样的结果:
Id | Name
------------
1 | A
2 | B
3 | C
5 | B
如果 ID 相等,则从第一个表中选择行:
实际上,我正在使用具有 20 多列的表。这些表格用于演示。
解决方案
一种选择使用not exists
:
select id, name
from t1
union all
select id, name
from t2
where not exists (select 1 from t1 where t1.id = t2.id)
你也可以使用条件聚合——虽然这更麻烦,而且效率可能有点低:
select
id,
coalesce(
max(case when which = 1 then name end),
max(case when which = 2 then name end)
) name
from (
select id, name, 1 which from t1
union all
select id, name, 2 from t2
) t
group by id
推荐阅读
- c++ - 按下 SDL 操纵杆按钮 / C++
- jquery - JQuery:如何向下滚动到刚刚使用 .show() 显示的元素
- azure - 使用 ASE v1 进行 Azure API 管理
- docker - Zookeeper 无法创建新的 znode
- asp.net-core-2.1 - 使用主 Web 应用程序的 dbcontext 的 Razor 类库
- c++ - 使用运算符 [] 在 std::vector<> 上引用过去最后一个元素的问题
- r - R - 向量中数字组合的频率计数超出完全匹配
- ruby - Ruby 将任意函数和参数传递给另一个函数
- linux - 在所有 Linux 发行版中,“dir”命令的输出是否相同?
- android - (Android) 如何禁用嵌套recyclerview的某些元素的滚动