更新外键表列

时间:2018-09-16 06:29:33

标签: sql-server-2012 sql-update

我正在尝试使用另一个表的数据(主键)更新表的列。创建数据库的人添加了一个“详细信息”表,所有ID都添加到了每行中,即使这些ID是相关的,因此实际上只需一个ID即可获得所有其他ID。 “详细信息”表如下所示:

RecordID    int
DepartmentID    int
ProjectID   int
FunctionID  int
TaskID  int
OwnerID int

但是,“部门”表已经具有ProjectID列;表“项目”具有一个FunctionID列,依此类推。因此,在此表中仅需要OwnerID即可获得所有其他ID。其余都是多余的。

表“功能”具有需要填充的“项目ID”列。当我跑步时:

select distinct(functionid), ProjectID from Detail order by FunctionID, ProjectID;

我得到:

FunctionID    ProjectID
1             5
10            9
11            1
12            1
13            8
14            10
15            8
16            8
17            1
...           ...

我需要第二部分:

update functions set projectid = (select ProjectID from Detail where FunctionID=?) 

我需要结束其中包含那些项目ID的“功能”表。

1 个答案:

答案 0 :(得分:0)

SQL Server在更新语句中支持join,因此您只需要一个内部联接:

UPDATE f
SET projectId = d.ProjectId
FROM functions As f
JOIN Detail As d 
    ON f.FunctionId = d.FunctionId