Sql 如何将三个基本相似但略有不同的表合并到一个表中?

Sql 如何将三个基本相似但略有不同的表合并到一个表中?,sql,sql-server,Sql,Sql Server,我想知道将三个表合并成一个新表的最简单方法是什么。这些表大多具有相似的字段名,但其中一个表比另外两个表多出约20个字段,而较宽的表约有130个字段。如果字段名匹配,则所有字段名都完全相同。这三个表有大约1米、1.5米和2米的记录 我可以这样做 CREATE TABLE ALLMERGED AS( SELECT * FROM TABLE1 UNION SELECT * FROM TABLE2 UNION SELECT * FROM TABLE3) 我

我想知道将三个表合并成一个新表的最简单方法是什么。这些表大多具有相似的字段名,但其中一个表比另外两个表多出约20个字段,而较宽的表约有130个字段。如果字段名匹配,则所有字段名都完全相同。这三个表有大约1米、1.5米和2米的记录

我可以这样做

CREATE TABLE ALLMERGED AS(
    SELECT * FROM TABLE1 
    UNION
    SELECT * FROM TABLE2 
    UNION
    SELECT * FROM TABLE3) 
我只是想知道星号字符是否可以按正确的顺序排列所有字段。这是最好的做法吗

我使用的是SQL Server Azure 2019


谢谢。

UNION子句的第一条规则是列数必须相同。根据您的描述,没有列不相同,因此您的查询将失败

为了创建一个新表,您需要显式地提及列名,如下所示-

       SELECT COL1, COL2, COL3 INTO ALLMERGED FROM TABLE1
       UNION ALL
       SELECT COL1, COL2, COL3 FROM TABLE2
       UNION ALL
       SELECT COL1, COL2, COL3 FROM TABLE3;
此外,您还需要注意所有这些列的数据类型也必须相同。

最佳做法是不让表具有完全相同的结构。这意味着您需要一个单独的表,用一列来区分1、2和3。在您的情况下,这可能是一个包含110列的主表。然后是一个包含20列的附加表

如果您确实希望使用union,那么您通常希望使用UNIONALL,除非您特别希望产生删除重复项的开销

并且,您应该明确列出列:

select col1, col2, col3 from table1
union all
select col1, col2, col3 from table2
union all
select col1, col2, col3 from table3;
在union/union all或其他集合操作中,按位置而不是名称访问列。因此,您需要绝对确保从不同的表中组合了正确的列

如果需要其他列,请在其他表中提供默认值:

select col1, col2, col3, null as col4 from table1
union all
select col1, col2, col3, null as col4 from table2
union all
select col1, col2, col3, col4 from table3;

不,如果不是所有表的列顺序完全相同,则不能使用星号字符*。事实上,您应该避免几乎完全使用星号字符。在使用匹配列排列三个select之后,您可以将仅存在于该表中的字段添加到更宽的表中,并将相同数量的null添加到其他两个表中。另外,请注意,将表创建为select。。。在SQL Server中不是有效语法。我认为联合的第一条规则是不要谈论联合:-谢谢。谢谢你,我一直喜欢你的评论,戈登。谢谢你的帮助。