如何在UPDATE查询中执行3个表JOIN?

Ric*_*cky 451 mysql join

我问了一个问题并得到了这个答复.

   UPDATE TABLE_A a JOIN TABLE_B b 
   ON a.join_col = b.join_col AND a.column_a = b.column_b 
   SET a.column_c = a.column_c + 1
Run Code Online (Sandbox Code Playgroud)

现在我希望这样做,如果有3个表涉及这样的事情.

    UPDATE tableC c JOIN tableB b JOIN tableA a
Run Code Online (Sandbox Code Playgroud)

我的问题基本上是...这可以在UPDATE声明中做3个表连接吗?它的正确语法是什么?谢谢.我做的......

 JOIN tableB, tableA
 JOIN tableB JOIN tableA
Run Code Online (Sandbox Code Playgroud)

ech*_*_Me 780

答案是yes你可以

试试吧

UPDATE TABLE_A a 
    JOIN TABLE_B b ON a.join_col = b.join_col AND a.column_a = b.column_b 
    JOIN TABLE_C c ON [condition]
SET a.column_c = a.column_c + 1
Run Code Online (Sandbox Code Playgroud)

编辑:

对于一般更新加入:

   UPDATE TABLEA a 
   JOIN TABLEB b ON a.join_colA = b.join_colB  
   SET a.columnToUpdate = [something]
Run Code Online (Sandbox Code Playgroud)

  • 然而奇怪的是,我的HeidiSQL软件报告零影响行,尽管数据显示更新已完成. (2认同)

Mat*_*ius 40

实现相同结果的替代方法是根本不使用JOIN关键字.

UPDATE TABLE_A, TABLE_B
SET TABLE_A.column_c = TABLE_B.column_c + 1
WHERE TABLE_A.join_col = TABLE_B.join_col
Run Code Online (Sandbox Code Playgroud)

  • 这样做一个隐含的`JOIN`就像`SELECT*FROM TABLE_A,TABLE_B ...`那样 (7认同)
  • 不完全相同的结果 - 您可以使用连接语法进行左连接. (4认同)
  • 我在5.5.62上试过这个,mysql不喜欢语法.根据手册[https://dev.mysql.com/doc/refman/5.6/en/update.html],查询应为:`UPDATE TABLE_A,TABLE_B SET TABLE_A.column_c = TABLE_A.column_c +1 WHERE TABLE_A .join_col = TABLE_B.join_col` (3认同)

小智 7

以下是包含JOIN&WHERE两者的更新查询.同样我们可以使用多个join/where子句,希望它能帮到你: -

UPDATE opportunities_cstm oc JOIN opportunities o ON oc.id_c = o.id
 SET oc.forecast_stage_c = 'APX'
 WHERE o.deleted = 0
   AND o.sales_stage IN('ABC','PQR','XYZ')
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到Stack Overflow!感谢您提供此代码段,该代码段可能会提供一些即时帮助.一个正确的解释[将大大改善](// meta.stackexchange.com/q/114762)其教育价值,通过展示*为什么*这是一个很好的解决方案的问题,并将使其对类似的未来读者更有用,但不一样的问题.请[编辑]您的答案以添加说明,并说明适用的限制和假设. (2认同)

vis*_*dya 5

是的,您可以为更新语句执行三表连接。这是一个例子:

UPDATE customer_table c

  JOIN
      employee_table e
      ON c.city_id = e.city_id
  JOIN
      anyother_table a
      ON a.someID = e.someID

SET c.active = "Yes"
WHERE c.city = "New york";
Run Code Online (Sandbox Code Playgroud)