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 ;
给定两个表:
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 ;