2017-05-12 26 views
0

我上的SQL查詢工作,從一個不同的表更新具有ID的列值更新在SQL表中的列與基於關係

Organization Table 
Id Name 
1 AA 
2 BB 

Events Table 
Id Name OrgId 
1 AA NULL 
2 AA NULL 
3 BB NULL 
從另一表中的值

現在,我想從組織表與其相應的標識,更新事件表的ORGID

我曾嘗試下面的查詢,但我已經明確地做它爲每個組織

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

我可以知道更好的方法來自動執行嗎?

回答

1

使用join

update e 
    set orid = o.id 
    from event e join 
     organization o 
     on o.name = e.tenant; 
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.*; 

輸出子句是可選的,並會打印出插入事件表中的ID的合併。

合併功能非常強大,因爲它具有其他子句,可用於數據只在一個表中而不在另一個表中的情況。這是一個很好的帖子,可以清楚地解釋事情。 https://www.simple-talk.com/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/