2013-01-24 62 views
1

我有兩個表,Table1和Table2。這些表格之間的公共列是CustId。 表1包含一個CustId的多個記錄,而作爲主表的table2僅包含Custid的一條記錄以及所有相關的客戶信息。更新查詢以循環運行

我想要做的是更新table2最近修改的table1記錄。

由於主表中有多個記錄,我希望查詢在循環中運行。

我寫了下面,

update Table1 
set 
Table1.col1=b.col1, 
Table1.col2 = b.col2, 
Table1.col3 = case 
when b.col3 = (select Id from table4 where name = 'Not Listed') 
then b.col4 
else b.col3 
end, 
Table1.col4 = case 
when b.col5 in (select Id from table5 where name = 'Not Listed') 
then b.col6 
else b.col5 
end 
from 
    (select top 1 Table2.* 
    from Table2,Table1 where 
    Table2.CustId = Table1.CustId 
    Order by 
    Table2.modifiedon desc)b 

where Table1.CustId = b.CustId 

,但我不知道它是否會爲表2中的所有記錄運行。

請求幫助

回答

0

請嘗試使用內部連接進行更新。請參閱鏈接Mastering the SQL UPDATE Syntax瞭解更多詳情。

UPDATE T1 
SET T1.col1=b.col1, 
    T1.col2 = b.col2, 
    T1.col3 = (case when b.col3 = (select Id from table4 where name = 'Not Listed') 
      then b.col4 
      else b.col3 end), 
    T1.col4 = (case when b.col5 = (select Id from table5 where name = 'Not Listed') 
      then b.col6 
      else b.col5 end) 

FROM Table1 T1 INNER JOIN 
(
    select ROW_NUMBER() over(partition by CustId order by modifiedon desc) Rnum, 
     CustId, modifiedon, col1, col2, col3, col4, col5, col6 
    FROM Table2 

)x ON x.CustId=T1.CustId 
WHERE x.Rnum=1