我正在尝试在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”已多次指定。
有人可以帮忙吗?经过漫长的一天没有任何解决方案的互联网搜索,我将不胜感激。
非常感谢您!
答案 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