我有一个关于我尝试在 sql server 中组合两个表的问题......
我有一个大约有 30 列的表(表 a),还有一个大约有 5 列的表(表 b),这 5 个表存在于 30 列的表中。我希望能够将表 b 添加到表 a 的末尾,并且只对新行中不存在的列使用 0 值。
有没有办法做到这一点?显然,如果我想将其他列保留在表 a 中,则常规联合将不起作用。
我有一个关于我尝试在 sql server 中组合两个表的问题......
我有一个大约有 30 列的表(表 a),还有一个大约有 5 列的表(表 b),这 5 个表存在于 30 列的表中。我希望能够将表 b 添加到表 a 的末尾,并且只对新行中不存在的列使用 0 值。
有没有办法做到这一点?显然,如果我想将其他列保留在表 a 中,则常规联合将不起作用。
基本思想是这样的,假设col3
不存在于TableB
:
select col1, col2, col3 from TableA
union all
select col1, col2, 0 as col3 from TableB
请注意保持每列中的数据类型相同。
要在最后保留TableB
记录,请执行以下操作:
select col1, col2, col3
from (
select 1 as Rank, col1, col2, col3 from TableA
union all
select 2 as Rank, col1, col2, 0 as col3 from TableB
) a
order by Rank
您可以将行插入:
insert into A(col1, col2, col3, col4, col5)
select col1, col2, col3, col4, col5
from B
这将为其余列应用默认值。默认值通常为 NULL,但可以在 create table 语句中更改。为了获得 0,您必须包含列并指定值:
insert into A(col1, col2, col3, col4, col5, col6 . . . col30)
select col1, col2, col3, col4, col5, 0 . . . 0
from B