从表到表添加列

时间:2018-12-20 18:07:16

标签: sql sql-server ssms

我有2张桌子:

  • Customers表,其中包含CustomerID(PK)和CustomerName
  • Orders表,其中包含CustomerNameProduct

我想将CustomerID列添加到Orders表中,以使其适合客户(该表上可能出现多次)。

我尝试通过向Orders表中添加新列,然后运行此更新:

UPDATE Orders 
SET NewColumn = (SELECT CustomerID FROM Customers 
                 WHERE CustomerName = Customers.CustomerName)
WHERE (NewColumn IS NULL)

但是,新列仍为null

3 个答案:

答案 0 :(得分:1)

您要寻找的是一个JOIN,如下所示。但是请注意,我根据您的回答发表了意见。结果,这可能不起作用,因为名称不是唯一的。 (在问题下的注释:“注意,同样,名字对于主/外键也是一个不好的选择。名字不是唯一的(我甚至遇到了一个和我名字和生日相同的人),因此,在编写查询时一定要为错误做好准备。” ):

UPDATE O
SET NewColumn = C.CustomerID
FROM dbo.Orders O
     JOIN dbo.Customers ON O.CustomerName = C.CustomerName;

如果您最终遇到错误/异常,那么我们需要知道如何确定哪个客户是正确的客户。

答案 1 :(得分:0)

由于两个表中都有相同的列,因此在读取列的位置应明确。以下应该起作用:

UPDATE Orders 
SET NewColumn = (select Customers.CustomerID from Customers 
  where Orders.CustomerName = Customers.CustomerName)
WHERE NewColumn is null

答案 2 :(得分:0)

您可以使用PIVOT和UNPIVOT关系运算符将表值表达式更改为另一个表。

https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017