如何基于联接和子查询从另一个表更新一个表

时间:2014-10-15 05:28:26

标签: sql sql-server-2008 sql-update

我有两张桌子。我想用另一个更新一个。 我写了两个查询来向您展示结果。这是我的两个问题

 select PrjTermsID,InstNo,InstDesc,BlockID from ProjectPaymentTerms where BlockID=1

select PlotBookingID,InstNo,InstDesc,PrjTermsID from PlotPaymentTerms where PlotBookingID in ( select PlotBookingID from PlotBooking where PlotID in ( select PlotID from PlotMaster where AppartmentBlock=1))

并查看结果enter image description here

的图片

第一个表有1到13个InstNo记录,第二个表有每个PlotBookingID有13个记录。(每个绘图将有13个(所有)付款条件对吗?)。现在我想用第一个表自动生成Id来更新第二个表PlotPaymentTerms。如果我尝试使用Inner join,它会提供更多结果。如何编写更新查询以更新第二个表?

2 个答案:

答案 0 :(得分:1)

update ppt
set ppt.PrjTermsID  = pp.PrjTermsID
from PlotPaymentTerms ppt
inner join ProjectPaymentTerms pp on ppt.InstNo = pp.InstNo and ppt.BlockID = 1
inner join PlotBooking pb on ppt.PlotBookingID = pb.PlotBookingID 
inner join PlotMaster pm on pb.PlotID = pm.PlotID 
where pm.AppartmentBlock = 1

请检查一下。

答案 1 :(得分:0)

我认为这不是正确的做法。无论如何它对我有用。

update ppt set ppt.PrjTermsID  = pp.PrjTermsID from PlotPaymentTerms ppt
inner join ProjectPaymentTerms pp on ppt.InstNo = pp.InstNo and pp.BlockID=1
and ppt.PlotBookingID in(select PlotBookingID from PlotBooking where PlotID in (  select PlotID from PlotMaster where AppartmentBlock=1))

向@Mukund致敬