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中的行