UNION ALL не работает должным образом — Oracle SQL

У меня есть две таблицы:

таблица А

| Part | Val |
|:----:|:---:|
|  AA  |  3  |
|  AB  |  2  |
|  AC  |  11 |
|  AD  |  6  |
|  AE  |  3  |

таблицаB

| Part | Val |
|:----:|:---:|
|  AC  |  9  |
|  AF  |  5  |
|  AG  |  1  |
|  AH  |  10 |
|  AI  |  97 |

Я хотел бы union эти таблицы для достижения этого результата:

| Part | ValA | ValB |
|:----:|:----:|:----:|
|  AA  |   3  |   0  |
|  AB  |   2  |   0  |
|  AC  |  11  |   9  |
|  AD  |   6  |   0  |
|  AE  |   3  |   0  |
|  AF  |   0  |   5  |
|  AG  |   0  |   1  |
|  AH  |   0  |  10  |
|  AI  |   0  |  97  |

Я пытался:

SELECT * FROM tableA
UNION ALL
SELECT * FROM tableB

Но это приводит только к одному столбцу vals, который мне не нужен.

Как я могу объединить эти таблицы и создать два столбца, по одному для каждой таблицы, где, если часть не отображается в другой таблице, ее значение может быть просто 0?

SQL FIDDLE для справки.


person wundermahn    schedule 09.10.2019    source источник


Ответы (2)


Похоже, вы хотите объединить таблицы, а не объединить их.

select nvl(a.Part, b.Part) as Part, 
       nvl( a.Val, 0 )     as ValA, 
       nvl( b.Val, 0 )     as ValB
  from tableA a
       full outer join tableB b 
         on( a.Part = b.Part )
 order by 1

Обратите внимание, что использование идентификаторов с учетом регистра, как в вашей скрипке, обычно не одобряется. Это, как правило, делает написание запросов более сложным, чем должно быть, и раздражает необходимость заключать в двойные кавычки имя каждого столбца.

Демо

person Justin Cave    schedule 09.10.2019
comment
Я думаю, что " появляется по умолчанию, когда я использую SQL Fiddle. (Обычно я создаю DDL, вставляя данные из Excel). Извинения. - person wundermahn; 09.10.2019

Вы можете попробовать ниже -

   select part,max(valA),max(valB) from
   (
      select part, val as valA, 0 as valB from tableA
      union all
      select part, 0 , val  from tableB
   )A group by part
person Fahmi    schedule 09.10.2019
comment
Это не сработает и приведет, например. две строки с AC. - person Tim Biegeleisen; 09.10.2019