如何通过使用两个表的联接来更新表?

时间:2019-04-08 09:21:52

标签: sql sql-server sql-server-2017

我有一个包含以下列的表:

Id int, Reference varchar(50), FileId int

“参考”列始终以“ D”或“ C”结尾。 FileId需要更新。更新时,我有一个可变的表:

DECLARE @fileIds TABLE (
  Id int NOT NULL,
  [Type] varchar(1) NOT NULL
);

此表变量始终最多具有2条记录,至少1条记录。 Type列的值为“ D”或“ C”

现在,我需要通过将FileId设置为与相应的文件ID匹配来更新我的表。这是执行更新的正确方法吗?

UPDATE myTable 
SET 
    FileId = f.Id
FROM
    myTable
    INNER JOIN @fileIds f ON RIGHT(s.Reference, 1) = p.[Type]

2 个答案:

答案 0 :(得分:1)

我认为缺少别名,但是您使用了两个不同的别名。因此,“引用”和“类型”列是属于哪个表,因为使用其他别名。

使用连接语法进行更新。

UPDATE
    A
SET 
    A.FileId = B.Id
FROM 
    tableA AS A
INNER JOIN 
    tableb AS B ON A.Id = B.Id

答案 1 :(得分:0)

您错过了mytable的别名

UPDATE s 
SET 
    FileId = f.Id
FROM
    myTable s
    INNER JOIN @fileIds f ON RIGHT(s.Reference, 1) = f.[Type]