使用基于关系的另一个表中的值更新sql表中的列

时间:2017-05-12 21:11:31

标签: sql sql-server

我正在使用SQL查询来更新具有来自不同表的Id的列值

实施例

Organization Table
Id Name
1  AA
2  BB

Events Table
Id Name OrgId
1  AA    NULL
2  AA    NULL
3  BB    NULL 

现在,我想更新事件表的OrgId及其各自的ID来自组织表

我确实尝试了以下查询,但我已明确为每个组织执行此操作

UPDATE Event SET OrId=
  (SELECT DISTINCT O.ID FROM Organization O WHERE O.Name='AA') WHERE Name='AA'

我可以自动了解更好的方法吗?

2 个答案:

答案 0 :(得分:1)

使用join

update e
    set orid = o.id
    from event e join
         organization o
         on o.name = e.tenant;

答案 1 :(得分:1)

您可以使用

执行合并
MERGE Event AS e
USING Organization AS o
ON (e.Name= o.name) 
WHEN MATCHED THEN 
    UPDATE SET e.OrgId = o.id
OUTPUT $action, inserted.*;

output子句是可选的,它将打印出插入Event表的ID。

Merge非常强大,因为它有其他子句可用于数据只在一个表而不是另一个表中的情况。这是一篇很好的帖子,可以清楚地解释事情。 https://www.simple-talk.com/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/