SQL UNION 或类似于提供缺失的缺失行? (拿两个)

SQL UNION or similar to supply missing absent rows? (Take two)

给定两个表:

T_A

Key_A   A_1
1       A
2       B
3       C

T_B

Key_B    Key_A  B_1
10       1      X
10       2      Y
10       3      Z
20       1      D
20       2      E
30       1      L

我想生成以下输出集

T_X

Key_B   Key_A   A_1    B_1
10      1       A      X
10      2       B      Y
10      3       C      Z
20      1       A      D
20      2       B      E
20      3       C      NULL   <-- Missing row to also be returned
30      1       A      L
30      2       B      NULL   <-- MRTABR
30      3       C      NULL   <-- MRTABR

以下 SQL 个样品在(拍摄 1)

中提供
select distinct T_B.Key_B, T_A.Key_A, T_A.A_1
from T_B
cross join T_A

select sq.Key_B, T_A.Key_A, T_A.A_1
from (select distinct Key_B from T_B) sq
cross join T_A

如果结果集中不需要第 T_B.B_1 列,两者都工作得很好。

如何修改 SQL 以包含 T_B。B_1?

你可以这样做:

select distinct b.Key_B, a.Key_A, a.A_1, b1.B_1
from T_A a cross join (select key_b from T_B) b
left join T_B b1 on b1.Key_B = b.Key_B and b1.Key_A = a.Key_A;

编辑:因为 Access2k 不支持 cross join 查询可以重写为:

select distinct c.Key_B, c.Key_A, c.A_1, B1.B_1 
from (
    select a.Key_A, a.A_1, b.Key_B 
    from T_A a, (select key_b from T_B) b
) c 
left join T_B b1 on B1.Key_B = c.Key_B and B1.Key_A = c.Key_A ;