使用内部联接或子查询更新 - 多个关系

时间:2015-01-07 18:52:26

标签: sql-server subquery inner-join

我需要并在表exp_pedcom上更新另一个表的字段为空(EXP_Procimp)的情况,但这两个表彼此之间没有直接关系,所以我需要"路由&#34 ;它通过另外两个表来联系它们。 "路由!关系有效,它会按预期返回,但更新不会。我尝试使用from和作为子查询的直接内部联接(实际上更容易演示,所以这就是这里的内容。

UPDATE EXP_PEDCOM
SET STATUS_ATENDIMENTO=0
WHERE EXP_PROCIMP.DAT_RECEBIMENTO IS NOT NULL IN (SELECT EXP_PROCIMP.DAT_RECEBIMENTO
FROM 
EXP_PEDCOM INNER JOIN 
EXP_INVOICE_IT ON EXP_PEDCOM.NUM_PEDCOM = EXP_INVOICE_IT.NUM_PEDCOM INNER JOIN 
EXP_INVOICE ON EXP_INVOICE_IT.COD_DOCUMENTO = EXP_INVOICE.COD_DOCUMENTO INNER JOIN 
EXP_PROCIMP ON EXP_INVOICE.NUM_PROCIMP = EXP_PROCIMP.NUM_PROCIMP)

任何提示?

1 个答案:

答案 0 :(得分:0)

以下显示了如何使用UPDATE... FROM...语法来使用它。 (在弄清楚查询实际执行的操作时,我弄乱了格式化和别名。)

UPDATE EXP_PEDCOM
 set STATUS_ATENDIMENTO = 0
 from EXP_PEDCOM
  inner join EXP_INVOICE_IT it
   on EXP_PEDCOM.NUM_PEDCOM = it.NUM_PEDCOM
  inner join EXP_INVOICE iv
   on it.COD_DOCUMENTO = iv.COD_DOCUMENTO
  inner join EXP_PROCIMP pr
   on iv.NUM_PROCIMP = pr.NUM_PROCIMP
 where pr.DAT_RECEBIMENTO is not null

这将有效[警告:我无法运行,因此调试可能的语法故障],但很难解释为什么/如何工作。它也有点不同寻常;希望你能得到其他帖子,以显示"正确的"运行此类查询的方法。