SQL UNION或类似工具是否提供缺少的行?

SQL UNION或类似工具是否提供缺少的行?,sql,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

鉴于这两个表格:

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中的行是否不包含列键a的值,提供/返回该行,就好像它在那里一样


是否有SQL返回此值?

您也可以使用内部联接:-

   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
请参见:-

您的声明

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

意味着如果某个值在那里,或者不在那里,则返回一行。这可以简化为不考虑返回值,甚至不检查。这使得事情变得简单,因为您可以执行
交叉联接
,它返回两个表的所有可能组合

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

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

执行联接,而不是并集。这意味着首先需要T_B表中缺少的行,来自上面的示例,20,3,C。。30,2,B。。30,3,C和当前行的并集。是否正确?因此,您希望从
T\u B
中获取每个不同的
Key\u B
列值,并将其与
T\u A
中的每一行配对(并且我们可以有效地忽略
T\u B
中的
Key\u A
)。正确吗?使用
完全外部联接
。请参阅中的详细信息:您应该使用
完全外部联接
获得预期结果。OP在问题中提供了预期结果集,而您的FIDLE没有生成该结果集。根据SQL FIDLE,这只是返回t_B中的行