使用 SELECT INTO 和 FULL JOIN 创建第三个表时出现“非唯一列”错误

1 sql-server t-sql

我正在尝试使用以下代码从两个现有表创建一个新表:

SELECT * INTO CustAndOrders from SalesLT.Customer 
FULL JOIN 
SalesLT.SalesOrderHeader
ON Customer.CustomerID=SalesOrderHeader.CustomerID;
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

Column names in each table must be unique. Column name 'CustomerID' in table 'CustAndOrders' is specified more than once.
Run Code Online (Sandbox Code Playgroud)

我的目的是创建第三个表,其中包含每个连接表中的所有字段。显然“CustomerID”出现了两次,这就是我要加入的。如果我删除 INTO 部分并作为 SELECT 语句执行,它会按预期工作。

Mar*_*ith 6

以防万一不清楚问题是什么,SELECT有两列被称为CustomerID. 每张桌子一个。一个表不能有两个相同命名的列,因此尝试创建具有该格式的表会失败。

解决方案是不要使用 *.

明确列出您想要的列并删除您不需要的重复列,或使用列别名来消除您实际需要的任何重复项的歧义。

通常对于完整的外部联接,您真正想要的是

SELECT COALESCE(Customer.CustomerID,SalesOrderHeader.CustomerID) as  CustomerID
       /*, other columns*/  
INTO   CustAndOrders
FROM   SalesLT.Customer
       FULL JOIN SalesLT.SalesOrderHeader
              ON Customer.CustomerID = SalesOrderHeader.CustomerID; 
Run Code Online (Sandbox Code Playgroud)

但无论如何你都需要一个完整的外部连接似乎令人怀疑。可能你需要一个LEFT JOIN

  • +1 表示 **“一个表不能有两个同名的列”**。您可以添加“与**可以具有**两个相同命名列的结果集相反”。 (2认同)