代码之家  ›  专栏  ›  技术社区  ›  sanjihan

使用单个SQL查询[duplicate]在中执行批更新

  •  0
  • sanjihan  · 技术社区  · 6 年前

    我有两张桌子,

    这是我的第一张桌子,

    ID      SUBST_ID        CREATED_ID
    1       031938          TEST123
    2       930111          COOL123
    3       000391          THIS109
    4       039301          BRO1011
    5       123456          COOL938
    ...     ...             ...
    

    ID      SERIAL_ID       BRANCH_ID
    1       039301          NULL
    2       000391          NULL
    3       123456          NULL
    ...     ...             ...
    

    我需要了解如何使用第一个表中的数据更新第二个表中的所有行。

    它需要在一个更新查询中完成这一切。

    SUBST\u ID和SERIAL\u ID都匹配,它需要从第一个表中获取创建的\u ID并将其插入到第二个表中。

    ID      SERIAL_ID       BRANCH_ID
    1       039301          BRO1011
    2       000391          THIS109
    3       123456          COOL938
    ...     ...             ...
    

    感谢您的帮助和指导。

    0 回复  |  直到 12 年前
        1
  •  141
  •   Tom    7 年前
    UPDATE TABLE2
           JOIN TABLE1
           ON TABLE2.SERIAL_ID = TABLE1.SUBST_ID
    SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
    
        2
  •  22
  •   RafaSashi    11 年前

    如果你需要的话,除了汤姆的回答 经常重复操作 我想 你可以做:

    UPDATE TABLE1
           JOIN TABLE2
           ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
    SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID
    WHERE TABLE2.BRANCH_ID IS NULL
    
        3
  •  4
  •   Pang firemonkey    9 年前
    UPDATE TABLE2
           JOIN TABLE1
           ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
    SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID 
    WHERE TABLE2.BRANCH_ID IS NULL or TABLE2.BRANCH_ID='';
    
        4
  •  4
  •   Faisal    8 年前

    我觉得这应该管用

    UPDATE secondTable
    JOIN firsTable ON secondTable.SERIAL_ID = firsTable.SUBST_ID
    SET BRANCH_ID = CREATED_ID
    
        5
  •  1
  •   Faisal    8 年前

    使用 INNER JOIN :

    UPDATE TABLE1
    INNER JOIN TABLE2 ON TABLE1.SUBST_ID = TABLE2.SERIAL_ID
    SET TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
    

    另一种替代方案如下:这里我使用 WHERE 从句代替 JOIN

    UPDATE 
        TABLE1,
        TABLE2
    WHERE
        TABLE1.SUBST_ID = TABLE2.SERIAL_ID
    SET 
        TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
    
        6
  •  1
  •   Abadis    7 年前

    你也可以用这个:

    update TABLE1 set BRANCH_ID = ( select BRANCH_ID from TABLE2 where TABLE1.SUBST_ID = TABLE2.SERIAL_ID)
    

    但以我的经验,我可以说,这种方式是如此缓慢,不建议它!

        7
  •  0
  •   vishwampandya    4 年前

    在SQL中使用内部连接查询进行更新非常简单 没有 FROM 条款。举个例子:

        UPDATE customer_table c 
    
          INNER JOIN  
              employee_table e
              ON (c.city_id = e.city_id)  
    
        SET c.active = "Yes"
    
        WHERE c.city = "New york";