UNION на основе всего одного столбца - PullRequest
0 голосов
/ 13 июля 2020

Я хочу ОБЪЕДИНЕНИЕ двух таблиц на основе одного столбца.

Предположим, у меня есть таблица с именем 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

Если идентификаторы равны, выберите строку из первой table:

На самом деле я работаю с таблицами, в которых более 20 столбцов. Эти таблицы предназначены для демонстрации.

Ответы [ 2 ]

2 голосов
/ 13 июля 2020

Один вариант использует 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
0 голосов
/ 13 июля 2020
from t1
union
select id, name
from t2 
...