SQL UNION或类似提供缺少的行?

时间:2015-08-19 08:25:54

标签: sql

鉴于两个表:

T_A

Key_A   A_1
1       A
2       B
3       C



T_B

Key_B    Key_A
10       1
10       2
10       3
20       1
20       2
30       1

我想生成以下输出集

T_X

Key_B   Key_A   A_1
10      1       A
10      2       B
10      3       C
20      1       A
20      2       B
20      3       C
30      1       A
30      2       B
30      3       C

或者,表T_B中的某一行是否包含列KEY_A的值,提供/返回该行,就像它在那里一样。

是否有任何SQL可以返回此内容?

2 个答案:

答案 0 :(得分:1)

您的陈述

  

或者,表T_B中的某一行是否包含列KEY_A的值,提供/返回该行,就像它在那里一样。

表示如果有值,则返回一行 - 或者不存在。这可以减少为返回值而不管甚至不检查。这使事情变得简单,因为您可以执行cross join,它返回两个表的每个可能组合。

以下内容将为您提供所需的结果:

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

但它可能更有效,更清楚你正在做什么,获得所有T_B.Key_B,然后将其加入另一个表,给出:

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

答案 1 :(得分:0)

你也可以使用内连接: -

   select T_A.A_1,T_B.Key_B,T_B.Key_A 
   from T_A inner join T_B
   on T_A.Key_A=T_B.Key_A

请参阅: - http://sqlfiddle.com/#!9/f1673/8