在 SQL 中将具有多个公共列的两个表合并为一个表
Combining two tables with multiple common columns into one in SQL
我正在尝试在 SQL 服务器中创建一个 table,其输出与以下内容相同:
Select *
FROM Table1
LEFT JOIN Table2
ON
Table1.Key1 = Table2.Key1
AND Table1.Key2 = Table2.Key2
上面的查询结果正是我所需要的,但是作为一个新的table.
问题是,两个 table 之间有多个公共列。我执行了以下代码:
Select *
INTO NewTable
FROM Table1
LEFT JOIN Table2
ON
Table1.Key1 = Table2.Key1
AND Table1.Key2 = Table2.Key2
出现以下错误:
Msg 2705, Level 16, State 3, Line 1
Column names in each table must be unique. Column name 'Key1' in table 'NewTable' is specified more than once.
有人可以帮忙吗?在互联网上搜索了一整天却没有任何解决方案后,我将不胜感激。
在此先感谢您!
当您将 select 写入 table 查询时,它会动态创建 table,并且在创建 table 时,列的名称应该是唯一的。
在您的情况下,当您加入时,列名可以同时出现在 table。
所以把*换成下面这样写
Select Column1, Column2, ... etc
INTO NewTable
FROM Table1
LEFT JOIN Table2
ON
Table1.Key1 = Table2.Key1
AND Table1.Key2 = Table2.Key2
您最简单的选择是将您的 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 "Design in Query Editor" 它会向您显示 select 语句 "select [all of the fields]" 而不是 "select *",这可能对您有用。
这将帮助您确定获得唯一列表所需的记录。
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
我正在尝试在 SQL 服务器中创建一个 table,其输出与以下内容相同:
Select *
FROM Table1
LEFT JOIN Table2
ON
Table1.Key1 = Table2.Key1
AND Table1.Key2 = Table2.Key2
上面的查询结果正是我所需要的,但是作为一个新的table.
问题是,两个 table 之间有多个公共列。我执行了以下代码:
Select *
INTO NewTable
FROM Table1
LEFT JOIN Table2
ON
Table1.Key1 = Table2.Key1
AND Table1.Key2 = Table2.Key2
出现以下错误:
Msg 2705, Level 16, State 3, Line 1
Column names in each table must be unique. Column name 'Key1' in table 'NewTable' is specified more than once.
有人可以帮忙吗?在互联网上搜索了一整天却没有任何解决方案后,我将不胜感激。
在此先感谢您!
当您将 select 写入 table 查询时,它会动态创建 table,并且在创建 table 时,列的名称应该是唯一的。
在您的情况下,当您加入时,列名可以同时出现在 table。
所以把*换成下面这样写
Select Column1, Column2, ... etc
INTO NewTable
FROM Table1
LEFT JOIN Table2
ON
Table1.Key1 = Table2.Key1
AND Table1.Key2 = Table2.Key2
您最简单的选择是将您的 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 "Design in Query Editor" 它会向您显示 select 语句 "select [all of the fields]" 而不是 "select *",这可能对您有用。
这将帮助您确定获得唯一列表所需的记录。
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