Левое соединение в Oracle для объединения столбцов с нулевым значением

#oracle #join #select #null #left-join

Вопрос:

У меня есть таблица, как показано ниже :

Таблица _а :

 Pos_id    col1     col2   value
12221     null     null    Car
12222     112      1111    Bike
12222     112      1112    Bus
12222     112      1113    Roller
 

Table_b :

 pos_id  col1       col2    line_nr
12221     100      1000     1
12222     112      1111     1
12222     112      1112     2
12222     112      1113     3
 

Я хочу выбрать значения table_a, номер строки которого равен 1 в table_b.

поэтому я попытался ПРИСОЕДИНИТЬСЯ СЛЕВА.

 select * from table_a
left join table_b
on a.pos_id = b.pos_id
and a.col1 = b.col1
and a.col2 = b.col2
where b.line_nr = 1;
 

Таким образом, при этом не выбирается столбец, имеющий значение null в table_a.

Мне нужно выбрать приведенные ниже столбцы из table_a

 Pos_id    col1     col2   value
12221     null     null    Car
12222     112      1111    Bike
 

Ответ №1:

Вы должны использовать левое внешнее соединение и строку принять с line_nr = 1 или NULL

 SELECT a.POS_ID, a.COL1, a.COL2, a.VAL
FROM table_a a
LEFT OUTER JOIN table_b b 
ON a.pos_id = b.pos_id
AND a.col1 = b.col1
AND a.col2 = b.col2
where nvl(b.line_nr,1) = 1
;

    POS_ID       COL1       COL2 VAL   
---------- ---------- ---------- ------
     12222        112       1111 Bike  
     12221                       Car 
 

Вероятно, это то, что вы имеете в виду — получить строки, a которые либо совпадают с b и имеют, line_nr = 1 либо не совпадают (т. Е. line_nr is null )