Oracle SQL - Как я могу объединить две таблицы, один ко многим? - PullRequest
0 голосов
/ 16 сентября 2018

Я хочу выполнить полное внешнее объединение, чтобы получить следующие результаты. В основном я присоединяю таблицу 1 к таблице 2.

Однако в таблице 1 все, что имеет 0 в столбце A, но имеет такое же доступное значение в столбце Ключ 1 (значение ключа 1 ABC100 в таблице 1), используйте только эту запись (запись 1 в таблице 1) и игнорируйте 0 записей (запись 2 в таблице 1)

При соединении с таблицей 2, специально для ABC100, я ожидаю увидеть выходные строки 1 и 2 в ожидаемых результатах таблицы.

Любая помощь или идеи об этом?

Пример:

Таблица 1

| Key 1    | Column A | 
| ABC100   | 100      |  
| ABC100   | 0        |  
| ABC300   | 200      | 
| ABC400   | 300      | 

Таблица 2

| Key 2    | Column C | 
| ABC100   | 100      |
| ABC200   | 50       |   
| ABC300   | 200      |  

Ожидаемые результаты:

| Key 1    | Column A | Key 2     | Column B | NVL(A,0) - NVL(B,0)
| ABC100   | 100      |  ABC100   | 100      | 0 
| ABC100   | NULL     |  NULL     | NULL     | NULL
| NULL     | NULL     |  ABC200   | 50       | -50
| ABC300   | 200      |  ABC300   | 200      | 0
| ABC400   | 300      |  NULL     | NULL     | 300

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Ваш набор результатов предполагает, что вы хотите что-то вроде этого:

SELECT t1.key1,
       (CASE WHEN t1.a <> 0 THEN t1.a END) as a,
       (CASE WHEN t1.a <> 0 THEN t2.key2 END) as key2,
       (CASE WHEN t1.a <> 0 THEN t2.c END) as ,
       (CASE WHEN t1.a <> 0 THEN COALESCE(t1.A, 0) - COALESCE(t2.B, 0) END) as diff
FROM t1 FULL JOIN
     t2
     ON t1.Key1 = t2.Key2;

Ваше описание предполагает, что вы хотите:

SELECT t1.key1, t1.a, t2.key2, t2.c,
       COALESCE(t1.A, 0) - COALESCE(t2.B, 0) as diff
FROM (SELECT t1.*
      FROM 
      WHERE t1.A <> 0 OR
            NOT EXISTS (SELECT 1 FROM t1 tt1 WHERE tt1.key1 = t1.key1 AND tt1.key1 <> 0)
     ) t1 FULL JOIN
     t2
     ON t1.Key1 = t2.Key2;
0 голосов
/ 16 сентября 2018

Вы можете использовать:

SELECT t1.*, t2.*, NVL(t1.A,0) - NVL(t2.B,0)
FROM tab1 t1
FULL JOIN tab2 t2
  ON t1.Key1=t2.Key2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...