关于mysql:如何在UPDATE查询中执行3个表JOIN?

How to do 3 table JOIN in UPDATE query?

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

1
2
3
   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

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

1
    UPDATE tableC c JOIN tableB b JOIN tableA a

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

1
2
 JOIN tableB, tableA
 JOIN tableB JOIN tableA


答案是yes你可以

试试吧

1
2
3
4
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

编辑:

对于一般更新加入:

1
2
3
   UPDATE TABLEA a
   JOIN TABLEB b ON a.join_colA = b.join_colB  
   SET a.columnToUpdate = [something]


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

1
2
3
UPDATE TABLE_A, TABLE_B
SET TABLE_A.column_c = TABLE_B.column_c + 1
WHERE TABLE_A.join_col = TABLE_B.join_col


以下是更新查询,其中包含JOINWHERE。 同样我们可以使用多个join / where子句,希望它能帮到你: -

1
2
3
4
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')


一个替代的总体规划,我只是作为一个独立的答案添加,因为爆炸的"答案评论"不会在没有发布整个编辑的情况下采取换行,即使它还没有完成。

1
2
3
4
5
UPDATE table A
JOIN table B ON {join fields}
JOIN table C ON {join fields}
JOIN {as many tables as you need}
SET A.column = {expression}

例:

1
2
3
4
UPDATE person P
JOIN address A ON P.home_address_id = A.id
JOIN city C ON A.city_id = C.id
SET P.home_zip = C.zipcode;

对于PostgreSQL示例:

1
2
3
4
UPDATE TableA AS a
SET param_from_table_a=FALSE -- param FROM TableA
FROM TableB AS b
WHERE b.id=a.param_id AND a.amount <> 0;