Tay*_*fun 3 mysql sql union pivot subquery
我想基于单个列合并两个表。
假设我有一个名为 t1 的表:
Id | Name
------------
1 | A
2 | B
3 | C
Run Code Online (Sandbox Code Playgroud)
第二个表称为 t2:
Id | Name
------------
1 | B
3 | B
5 | B
Run Code Online (Sandbox Code Playgroud)
我想像这样联合它们:
SELECT * FROM T1
UNION
SELECT * FROM T2
BASED ON ID
Run Code Online (Sandbox Code Playgroud)
我期望这样的结果:
Id | Name
------------
1 | A
2 | B
3 | C
5 | B
Run Code Online (Sandbox Code Playgroud)
如果 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)
Run Code Online (Sandbox Code Playgroud)
您还可以使用条件聚合 - 尽管这更麻烦,而且效率可能有点低:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2423 次 |
| 最近记录: |