从嵌套SQL查询的结果更新多个表中的多个列

时间:2014-03-14 10:28:40

标签: sql sql-update nested-queries

我启动并运行此查询,它给出了绝对正确的结果。我总共有4张桌子。 Table1Table2Table3Table4。结果查询通过连接3个不同的表来提供结果。

现在的问题是我必须更新'每个表的1列PER行。我无法挖掘解决方案。我在同样的问题上停留了2天,任何帮助都会非常明显:)

SELECT TempID,
       custom,
       STATE,
       orgUnit,
       displayName ,
       stateCust ,
       consumer.bol_is_active AS stateConsumer
FROM
  (SELECT TempID,
          custom,
          STATE,
          cust.id_orgunit AS orgUnit,
          cust.str_display_name AS displayName,
          cust.bol_is_active AS stateCust
   FROM
     (SELECT DISTINCT CA.ID_CUSTOMER AS TempID ,
                      ca.str_value AS custom,
                      ci.bol_is_active AS STATE
      FROM Table1 CA
      JOIN Table2 CI ON CA.ID_CUSTOMER = CI.ID_CUSTOMER AND CI.ID_CUSTOMER = '11667312'
      WHERE CA.STR_VALUE='Customer'
        AND ci.bol_is_active ='N')
   JOIN Table3 Cust ON TempID = cust.id_customer)
JOIN Table4 consumer ON TempID = consumer.id_customer;

我想更新STATEstatuCuststateConsumer的值。请帮忙。

1 个答案:

答案 0 :(得分:1)

您可以将此作为三个单独的UPDATE语句执行此操作,因为这些值位于不同的表中。这三个更新可以包装在一个事务中,因此它们都可以作为单个操作完成。

每个WHERE语句的INSERT子句看起来类似于select的join和where子句,因此要更新的行与select语句显示的行匹配。我现在没时间计算每个INSERT语句,希望这可以指出你正确的方向,我将在稍后更详细地尝试更新这个答案。

BEGIN TRANSACTION ;

-- Update STATE
UPDATE Table2 SET bol_is_active WHERE ... ;

-- Update stateCust
UPDATE Table3 SET bol_is_active WHERE ... ;

-- Update stateConsumer
UPDATE Table4 SET bol_is_active WHERE ... ;

COMMIT;