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个表,我现在希望这样做
这样的事情。
我的问题基本上是......这可以在UPDATE语句中进行3表连接吗? 它的正确语法是什么? 谢谢。 我做的......
-
当然有可能。 试试看。 语法就像你拥有它一样 - 你只需要添加下一个JOIN及其ON条件,就像在SELECT查询中一样。
-
UPDATE t1 JOIN t2 ON t1.id = t2.t1_id JOIN t3 ON t3.id = t2.t3_id SET t1.col = 'newval'
-
提到的问题在这里:stackoverflow.com/questions/15206746/
答案是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 ] |
-
然而奇怪的是,我的HeidiSQL软件报告零影响行,尽管数据显示更新已完成。
-
@Pianoman对我来说它也发生了,它与ON UPDATE CURRENT_TIMESTAMP有关,我只是手动添加更新并修复它,只是说它是否发生在其他人身上
-
如果您需要可视化帮助以使连接正确:browse-tutorials.com/tutorial/mysql-joins-visual-representation
-
非常性感谢谢你,这对我很有帮助
-
我认为以下是一个更好的总体规划:UPDATE table A JOIN table B ON {join data} JOIN table C ON {join data} JOIN {more join tables} SET A.column = {expression}(请原谅我,如果这个爆破的编辑不会让我在没有完整帖子的情况下输入换行符)
-
WHERE ??或WHERE是不可能的?
-
@Green在这里几乎就像ON。 ON是一个条件。
-
在SET之后,@ green WHERE来到最后。 echo_Me请在帖子中添加WHERE,因为以后的评论不会显示。
-
谢谢。我一直在寻找这个问题的解决方案大约一个小时。
实现相同结果的替代方法是根本不使用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 |
-
我在5.5.62上试过这个,mysql不喜欢语法。根据手册[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
-
这与SELECT * FROM TABLE_A, TABLE_B ...执行隐式JOIN的方式相同
-
那么这是否意味着在5.5中只接受隐式连接形式进行更新?
-
@userfuser不,它没有,手册说明语法:UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition]稍后,手册说明:"table_references子句列出了连接中涉及的表。其语法在第13.2.9.2节中描述,JOIN句法。"
-
不完全相同的结果 - 您可以使用连接语法进行左连接。
-
谢谢。这有效,但是如何对第二个表(table_b)进行排序,以便将column_c的最新值保存在table_a column_c中。
以下是更新查询,其中包含JOIN和WHERE。 同样我们可以使用多个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') |
-
欢迎来到Stack Overflow!感谢您提供此代码段,该代码段可能会提供一些即时帮助。通过说明为什么这是一个很好的解决问题的方法,一个正确的解释将大大提高其教育价值,并使其对具有类似但不相同的问题的未来读者更有用。请编辑您的答案以添加说明,并说明适用的限制和假设。
一个替代的总体规划,我只是作为一个独立的答案添加,因为爆炸的"答案评论"不会在没有发布整个编辑的情况下采取换行,即使它还没有完成。
例:
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示例: