#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
)