SQL объединяет две таблицы и создает новый столбец - PullRequest
2 голосов
/ 20 сентября 2019

У меня есть две таблицы на HANA, которые построены из одинаковых столбцов.Таблица A содержит идентификаторы, которые также находятся в таблице B, но она также содержит идентификаторы, которых нет в таблице B. Таблица B может также содержать идентификаторы, которых нет в таблице A.

Я хочу объединить обе таблицы.В результате должны быть перечислены все записи, которые находятся либо в таблице A, либо в таблице B. Однако, если один идентификатор является частью обеих таблиц, в результате должна быть только одна запись идентификатора.

Чтобы отличать использование идентификаторов, в результате должен быть новый столбец.Должно отображаться одно из следующих значений:

  • «Таблица A», если идентификатор только в таблице A
  • «Таблица B», если идентификатор только в таблице B
  • «Таблица A + B», если идентификатор находится в обеих таблицах

Вот несколько набросков о том, чего я хочу достичь:

enter image description here

Я ценю любую помощь!

С наилучшими пожеланиями.

Ответы [ 3 ]

2 голосов
/ 20 сентября 2019

Звучит так, как будто вы хотите full join:

select coalesce(a.id, b.id) as id,
       (case when a.id is null then 'B only'
             when b.id is null then 'A only'
             else 'Both'
        end) as which_table,
       . . .  -- whatever other columns you want
from a full join
     b
     on a.id = b.id;
1 голос
/ 20 сентября 2019

Я сделал это для базы данных Oracle.Может быть, это может помочь ...

select coalesce(a.id1, b.id2) as ID,
       coalesce(a.description1, b.description2) as Description
        , (case 
             when a.id1 = b.id2 then 'Table A+B'
             when b.id2 not in (select id1 from a) then 'Table B'
             else 'Table A'
        end) as Usage
from a full join b
on nvl(a.id1, b.id2) = b.id2;

Демо здесь: http://sqlfiddle.com/#!4/56232/1

1 голос
/ 20 сентября 2019

Сделайте UNION ALL, затем GROUP BY его результат:

select id, description, max(ta), max(tb)
from
(
    select id, description, 'A' as ta, null as tb from tablea
    union all
    select id, description, null, 'B' from tableb
) dt
group by id, description
...