我有2张桌子:
Customers
表,其中包含CustomerID
(PK)和CustomerName
列Orders
表,其中包含CustomerName
和Product
列我想将CustomerID
列添加到Orders
表中,以使其适合客户(该表上可能出现多次)。
我尝试通过向Orders
表中添加新列,然后运行此更新:
UPDATE Orders
SET NewColumn = (SELECT CustomerID FROM Customers
WHERE CustomerName = Customers.CustomerName)
WHERE (NewColumn IS NULL)
但是,新列仍为null
。
答案 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