Sql 如何将三个基本相似但略有不同的表合并到一个表中?
我想知道将三个表合并成一个新表的最简单方法是什么。这些表大多具有相似的字段名,但其中一个表比另外两个表多出约20个字段,而较宽的表约有130个字段。如果字段名匹配,则所有字段名都完全相同。这三个表有大约1米、1.5米和2米的记录 我可以这样做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) 我
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中不是有效语法。我认为联合的第一条规则是不要谈论联合:-谢谢。谢谢你,我一直喜欢你的评论,戈登。谢谢你的帮助。