在SQL中将具有多个公共列的两个表合并为一个

时间:2019-01-16 17:26:52

标签: sql-server create-table

我正在尝试在SQL Server中创建一个表,该表具有与以下相同的输出:

Select *  
FROM Table1  
LEFT JOIN Table2  
ON  
    Table1.Key1 = Table2.Key1 
AND Table1.Key2 = Table2.Key2

上述查询的结果正是我所需要的,但是作为一个新表。

问题是,两个表之间共有多个列。我已经执行了以下代码:

Select *  
INTO NewTable  
FROM Table1  
LEFT JOIN Table2  
ON    
    Table1.Key1 = Table2.Key1 
AND Table1.Key2 = Table2.Key2

出现以下错误:

  

第1行3州16级2705消息
  每个表中的列名必须唯一。表“ NewTable”中的列名“ Key1”已多次指定。

有人可以帮忙吗?经过漫长的一天没有任何解决方案的互联网搜索,我将不胜感激。

非常感谢您!

3 个答案:

答案 0 :(得分:0)

在表查询中写入select时,它将动态创建表,并且在创建表时,列名应该是唯一的。

在您加入的情况下,列名称可以在两个表中。

因此替换*并如下所示编写

Select Column1, Column2, ... etc  
INTO NewTable  
FROM Table1  
LEFT JOIN Table2  
ON    
    Table1.Key1 = Table2.Key1 
AND Table1.Key2 = Table2.Key2

答案 1 :(得分:0)

您最简单的选择是将您的select-into语句更改为类似的名称,在其中您为具有相同名称的字段指定唯一的名称:

Select Table1.Key1 as [Key1a], Table2.Key1 as [Key1b], etc.
INTO NewTable  
FROM Table1  
LEFT JOIN Table2  
ON    
    Table1.Key1 = Table2.Key1 
AND Table1.Key2 = Table2.Key2

如果您使用的是SSMS,则可以突出显示查询,右键单击它,然后选择“在查询编辑器中设计”,它将显示select语句为“ select [所有字段]”,而不是“ select *”,这可能对您有用。

答案 2 :(得分:0)

这将帮助您确定获得唯一列表所需的记录。

select ',' + Column_Name
from INFORMATION_SCHEMA.COLUMNS c2
where column_Name not in (
                        select COLUMN_NAME
                        from INFORMATION_SCHEMA.COLUMNS
                        where TABLE_NAME = 'table1')
and table_Name = 'Table2'

所以您可以放心地说:

Select table1.*
    <<Paste in your results from above here>>  
INTO NewTable  
FROM Table1  
LEFT JOIN Table2  
ON    
    Table1.Key1 = Table2.Key1 
AND Table1.Key2 = Table2.Key2