这个NULL元组来自哪里

时间:2018-07-11 08:55:11

标签: sql

我真的不明白,为什么空元组有时来自何处。我比较了输入数据,没有任何东西,从那里我可以说“好吧,这是不同的,这就是问题所在”。 所以有时候它会被附着,有时候却不会。

select
XP1.SOME_ID,
coalesce(AA1.NumberPP,KK1.NumberPP) as NumberPP,
coalesce(AA1.TNumB,KK1.TNumB) as TNumB,
coalesce(AA1.XY_ID,KK1.XY_ID) as TNumB,
coalesce(AA1.SAM,KK1.SAM) as SAM,
......
,
FROM TaB1 t1
INNER JOIN TaYY1 XP1 on t1.ID = XP1.ID
LEFT JOIN TaB1 AA1 on
(
   t1.M_ID is null
   and AA1.M_ID is null
   and AA1.XY_ID is not null
   and t1.XY_ID is not null
   and t1.XY_ID = AA1.XY_ID
   AND t1.NumberPP = AA1.NumberPP
   AND t1.TNumB = AA1.TNumB 
)
left join TaB1 KK1 on
(
   t1.M_ID is not null
   and t1.XY_ID is null
   and KK1.M_ID is not null
   and KK1.XY_ID is null
   and t1.M_ID = KK1.M_ID
)

输出:

SOME_ID NumberPP    TNumB   XY_ID    SAM      xy     yx       xx
1      <null>       <null>    32     s.th    xyz     123    <null>
1      <null>       <null>  <null>  <null>  <null>  <null>  <null>
1         1           2       32     s.th    xyz      123     55

(T1.M_ID和AA1.XY_ID)在TaB1 t1中可以为null,其他键不为null,而在TaB1 KK1中可以相反。

以后是更好的,但是输入是这样的:

   M_ID     XY_ID     OTHERID(not in code)     SAM    Car      Color
  213424    null      null                      Kts    Tesla     Red
   null     1236       14                       PRS    BMW       Black

在某些情况下,输出如下:

SOME_ID  SAM     Car    Color
1         Kts   Tesla    Red
1         null   null    null
1         PRS    BMW     BLACK

很高兴进行编辑,我希望小的输入表现在可以了。后来更好了。

1 个答案:

答案 0 :(得分:0)

您的表TAB1LEFT JOIN联接了两次,因此,这意味着如果在TAB1中找不到匹配的行,则{的所有列都将显示NULL。 {1}}。 TAB1就是这样。

此外,您正在使用合并,因此有时数据来自AA1,有时数据来自KK1。如果将select语句更改为以下内容,则可能会更容易理解。

LEFT JOIN