SQL左连接逻辑疑问:b_Seq_Number为何呈现增1结果?
SQL LEFT JOIN 逻辑解析
先拆解你的连接条件:a."Seq_Number" = b."Seq_Number" - 1,这个等式可以变形为 b."Seq_Number" = a."Seq_Number" + 1。这意味着:
- 对于
src a中的每一行,SQL会在src b里寻找Seq_Number值比当前a行大1的记录 - 如果找到,就把b的对应字段值返回;找不到的话(比如a是最大的Seq_Number),b的字段会返回NULL
实际示例说明
假设src表的Seq_Number字段有0、1、2三条数据:
- 当a行的
Seq_Number=0时,连接条件匹配b行的Seq_Number=0+1=1,返回的b_Seq_Number=1 - 当a行的
Seq_Number=1时,匹配b行的Seq_Number=1+1=2,返回的b_Seq_Number=2 - 当a行的
Seq_Number=2时,找不到满足b."Seq_Number"=3的记录,所以b_Seq_Number为NULL
这就是你看到“实际却是增1结果”的原因——你的条件逻辑是让b的Seq_Number比a大1,而非你预期的b比a小1。
修正逻辑(达成预期结果)
如果要实现“a第1行对应b的0、第2行对应b的1”,需要把连接条件改成:
a."Seq_Number" = b."Seq_Number" + 1
或者等价写法:
b."Seq_Number" = a."Seq_Number" - 1
这样就能让a的每一行匹配到b中Seq_Number比自己小1的记录。
内容的提问来源于stack exchange,提问作者plae
相关产品推荐
相关产品推荐

