Left Join 在 Oracle 中加入具有空值的列

Left Join in Oracle to Join columns with Null Value

我有一个 table 如下所示:

Table_a :

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

我想 select table_a 的值 line_nr 在 table_b.

中的 line_nr 是 1

所以我尝试了 LEFT JOIN。

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;

所以这 select table_a 中没有空的列。

我需要 select 以下来自 table_a

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

您必须使用 left outer join 并且 accept 行与 line_nr = 1NULL

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