仅基于一列的 UNION

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 多个列的表。这些表用于演示。

GMB*_*GMB 5

一种选择使用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)