【问题标题】:How to write an UPDATE depending on values in other table如何根据其他表中的值编写更新
【发布时间】:2019-05-01 06:18:46
【问题描述】:

我有一个关于 MySQL 中“更新”的问题。我有两张表table1table2 连接table1.id=table2.tab1。现在,我想根据table1 中的值更新table2 中的值。我试图这样做:

UPDATE table2 SET table2.val='new value' 
WHERE table1.id=table2.tab1 AND table1.val='xy' 

换句话说,我想更改table2 中所有条目的值val,其中table1 中的相应条目具有值'xy'。

很遗憾,这不起作用。谁能给我一个提示?

【问题讨论】:

    标签: mysql sql join syntax sql-update


    【解决方案1】:

    你应该使用 UPDATE + JOIN 语句

    UPDATE table2 
    JOIN table1 ON table1.id=table2.tab1 
    SET table2.val='new value' 
    WHERE table1.val='xy' 
    

    或子查询

    UPDATE table2
    SET table2.val='new value' 
    WHERE table2.tab1 IN (
        SELECT id
        FROM table1
        WHERE table1.val='xy'
    )
    

    【讨论】:

      【解决方案2】:

      这不是正确的语法。您应该使用更新加入

      UPDATE table2
      JOIN   table1 ON table1.id = table2.tab1
      SET    table2.val = 'new value' 
      WHERE  table1.val = 'xy' 
      

      【讨论】:

      • ON 子句需要修正。
      • tabel2.id 替换为table1.id
      • @Samir 我早上过得很糟糕 :-( 感谢您的关注。
      • 不用担心 :)))
      【解决方案3】:
      UPDATE table2
      JOIN table1 ON table1.id=table2.tab1 
      SET table2.val='new value' 
      WHERE table1.val='xy' 
      

      【讨论】:

        【解决方案4】:
        UPDATE B
        SET B.val='new value' 
        FROM table1 A
        JOIN table2 B ON A.id=B.tab1
        WHERE A.val='xy'
        

        【讨论】:

          【解决方案5】:
          UPDATE table2 
          SET table2.val='new value' 
          FROM table1 
              JOIN table2 ON table1.id=table2.tab1
          WHERE table1.val='xy'
          

          【讨论】:

          • FROM 查询中不能有 FROM 子句
          • 对不起。我被误认为是 mssql。
          猜你喜欢
          • 1970-01-01
          • 2020-02-19
          • 2016-01-13
          • 1970-01-01
          • 2017-06-21
          • 2021-01-28
          • 2021-10-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多