我真的不明白,为什么空元组有时来自何处。我比较了输入数据,没有任何东西,从那里我可以说“好吧,这是不同的,这就是问题所在”。 所以有时候它会被附着,有时候却不会。
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
很高兴进行编辑,我希望小的输入表现在可以了。后来更好了。
答案 0 :(得分:0)
您的表TAB1
与LEFT JOIN
联接了两次,因此,这意味着如果在TAB1
中找不到匹配的行,则{的所有列都将显示NULL。 {1}}。 TAB1
就是这样。
此外,您正在使用合并,因此有时数据来自AA1,有时数据来自KK1。如果将select语句更改为以下内容,则可能会更容易理解。
LEFT JOIN