首页 > 解决方案 > 没有巧合时如何连接两个表?

问题描述

我有两个要加入的表。我尝试了通常的左右连接,但都没有给出我想要的结果。

表A

ID_A     VALUE_A
-----------------
A           1     
B           2     

表 B

ID_B   ID_A    VALUE_B
-------------------------
90       A        1
90       C        1
90       E        1  
91       A        1
91       B        1
92       B        1
92       E        1
92       F        1

我想得到这个结果:

ID_A   VALUE_A     ID_B     ID_A   VALUE_B 
-------------------------------------------------
A        1          90        A       1 
B        2          90        NULL    NULL 
A        1          91        A       1 
B        2          91        B       1
A        1          92        NULL    NULL
B        2          92        B       1

标签: sqlsql-serverjoin

解决方案


如果我理解正确,您需要第一个表的所有组合id_a以及value_a与第二个表不同id_b的所有组合。如果是这样:

select iv.id_a, iv.value_a, ib.id_b, b.id_a, b.value_b
from (select distinct id_a, value_a from a) iv cross join
     (select distinct id_b from b) ib left join
     b
     on b.id_b = ib.id_b and b.id_a = iv.id_a;

cross join生成行。left join带来了额外的列。


推荐阅读