SQL - 使用另一个表中的值更新一个表中的行 - 多个匹配

时间:2017-04-29 21:42:46

标签: sql sql-server

我正在尝试使用Sales表中的数据在Costumer表中追加值。 客户可以在Sales表中拥有多条记录: 特此加入观点:

SalesID CostumerID  SalesComment    CostumerComment
1       14              Com1            Costumer Comment 1
2       15              Com2            Costumer Comment 2
3       14              Com3            Costumer Comment 1
4       14                              Costumer Comment 1

我想进行这样的更新:

UPDATE Costumer
    SET Costumer.ShopBookKommentar = cast ([ShopBookKommentar] as nvarchar(max)) 
+ CAST(CHAR(13)+CHAR(10) + S.Comments as nvarchar(max)) 
FROM Costumer C INNER JOIN
     Sales S
     ON S.CostumerID = c.ID

但它没有更新其中一个销售行注释字段为空的任何Costumer行('')

1 个答案:

答案 0 :(得分:1)

看起来您正在使用SQL Server。您需要使用update的表别名:

UPDATE c
    SET ShopBookKommentar = c.ShopBookKommentar + CHAR(13) + CHAR(10) + S.Comments 
    FROM Costumer C INNER JOIN
         Sales S
         ON S.CostumerID = c.ID;

如果由于某种原因中间结果不够大,您只需要cast()。但那应该不是问题。

编辑:

我猜你确实想要从Sales的不同行应用多个评论。这有点棘手:

UPDATE c
    SET ShopBookKommentar = c.ShopBookKommentar + c.somm
    FROM (SELECT c.*,
                 (SELECT CHAR(13) + CHAR(10) + S.Comments 
                  FROM Sales s
                  WHERE S.CostumerID = c.ID AND
                        S.Comments IS NOT NULL
                  FOR XML PATH, TYPE
                 ).value(N'.[1]', N'varchar(max)') as scomm                   
          FROM c
         ) Costumer C INNER JOIN
         (Sales S
         ON ;