【问题标题】:MySQL update table based on another tables valueMySQL 根据另一个表值更新表
【发布时间】:2012-09-05 20:19:48
【问题描述】:

我有两张桌子,

这是我的第一张桌子,

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_ID 和 SERIAL_ID 都匹配,需要从第一个表中抓取 created_id 并插入到第二个表中。

所以第二个表会变成下面这样,

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

感谢您的帮助和指导。

【问题讨论】:

    标签: mysql join sql-update


    【解决方案1】:
    UPDATE TABLE2
           JOIN TABLE1
           ON TABLE2.SERIAL_ID = TABLE1.SUBST_ID
    SET    TABLE2.BRANCH_ID = TABLE1.CREATED_ID;
    

    【讨论】:

    • 您好,我在使用此解决方案时遇到错误。 '错误代码:1175。您正在使用安全更新模式,并且您尝试更新没有使用 KEY 列的 WHERE 的表。要禁用安全模式,请切换 Preferences -> SQL Editor 中的选项并重新连接。'
    • 我用 where 条件修改了查询,但仍然是同样的错误。 QUERY: update contract c join contractstatus c set c.status=cs.status where cs.contract=c.id;
    • 有什么办法可以在不禁用mysql安全模式的情况下做到这一点。
    • 您需要为需要更新的列定义一个索引,然后错误然后安全模式错误就会消失
    【解决方案2】:

    如果您需要经常重复操作并希望节省时间,除了汤姆的回答之外,您还可以这样做:

    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】:
      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='';
      

      【讨论】:

      • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
      • 通过在 subset_Id 和 Serial_Id 上使用连接,您将获得一个结果集。该结果集将包含已创建的 id..现在集中在 SET 之后的查询,我们实际上将 created_Id 中的值分配或提供给 Branch_Id 。 ...希望你明白.. :)
      【解决方案4】:

      我认为这应该可行

      UPDATE secondTable
      JOIN firsTable ON secondTable.SERIAL_ID = firsTable.SUBST_ID
      SET BRANCH_ID = CREATED_ID
      

      【讨论】:

        【解决方案5】:

        在 SQL 中使用 Inner join 查询更新非常简单。无需 使用 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";
        

        【讨论】:

          【解决方案6】:

          使用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;
          

          【讨论】:

            【解决方案7】:

            你也可以用这个:

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

            但是以我的经验我可以说这种方式太慢了,不推荐!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-10-20
              • 2012-11-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多