【问题标题】:How to update one table from another table based on joins and subqueries如何根据连接和子查询从另一个表更新一个表
【发布时间】:2014-10-15 05:28:26
【问题描述】:

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

 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))

查看结果图片

第一个表有 1 到 13 条记录,其中 InstNo 和第二个表有每个 PlotBookingID 有 13 条记录。(每个地块将有 13(所有)个付款条件,对吗?)。现在我想用第一个表自动生成的 ID 更新第二个表 PlotPaymentTerms。如果我尝试使用内部连接,它会给出更多结果。如何编写更新查询来更新第二个表?

【问题讨论】:

  • 为什么要更新第二个表中的 id ?
  • 之前没有在第二个表中添加 PrjTermsID。现在我们在我的应用程序中添加了那个东西。所以过去的记录是空的,因为我在第二个表中添加了该字段最近

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


【解决方案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

请检查一下。

【讨论】:

  • 它更新了错误的 id :( 。我认为我们不应该使用 INNER JOIN。它像具有正确 ID 的交替行一样更新。像 1、3、5、7、9... 是对。而且偶数 ID 插入错误
  • @Iam 你现在可以检查一下上面的查询吗,我刚刚更新了答案。
【解决方案2】:

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

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

【讨论】:

  • inner join 总是比 in 子句好。它执行速度很快。我不明白它是如何不更新偶数行的。如果它适用于奇数,那么它也应该适用于偶数,b/c 逻辑是相同的。 @Iam
猜你喜欢
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 2016-05-25
相关资源
最近更新 更多