将Table1中的列中的不同记录插入到列表2中,并将它们放在不同列上的行中

时间:2016-01-07 19:15:43

标签: sql sql-server join sql-insert sql-server-2014

enter image description here

第一个表我想将Product.ProductName列移动到名为Inventory.ProductName的第二个表中,但删除所有重复的条目。我可以这样做,但当我将这些不同的值插入Inventory.ProductName时,它会为它们创建行,而不是将它们与正确的ProductID相关联。无法绕过这一个。这是我尝试过的。

insert into dbo.Inventory (ProductName)
select distinct Product.ProductName
from dbo.Product
inner join dbo.Inventory on (Product.Name = Inventory.ProductID)

2 个答案:

答案 0 :(得分:1)

您正在寻找的粗略语法是:

UPDATE dbo.Inventory 
SET ProductName = Product.ProductName
FROM 
    dbo.Inventory 
     INNER JOIN 
    dbo.Product ON 
        Inventory.ProductID = Product.Name

这会将Inventory中的产品名称设置为Product中的产品名称。请注意,如果Product.ProductName存在多个版本的Product.Name,则会出现问题。

答案 1 :(得分:1)

您应该使用合并声明:

MERGE Inventory AS target
USING (SELECT Name, ProductName FROM Product) AS source (ProductID, ProductName)
ON (target.ProductID = source.ProductID)
WHEN MATCHED
    THEN UPDATE SET Name = source.ProductName
WHEN NOT MATCHED 
    THEN INSERT (ProductID, Name)
VALUES (source.ProductID, source.ProductName);

您可以在此处找到更多信息:https://msdn.microsoft.com/es-es/library/bb510625(v=sql.120).aspx