我理解这里的语法:
UPDATE table
SET column1 = expression1,
column2 = expression2,
...
WHERE conditions;
在这里:
UPDATE table1
SET column1 = (SELECT expression1
FROM table2
WHERE conditions)
WHERE conditions;
...但如果我想更新
怎么办?UPDATE table1
SET column1 = expression
if we get a particular result on a join between table1 and table2
which has WHERE conditions?
我似乎无法弄清楚,我在所有尝试中都会遇到语法错误。任何建议都非常感谢。
答案 0 :(得分:3)
MySQL中的语法是:
UPDATE table1 JOIN
table2
ON conditions
SET table1.column1 = table2.expression1
WHERE conditions;
答案 1 :(得分:2)
我所做的就是先将它写成SELECT语句。
SELECT t.id
, t.col AS old_val
, s.expr AS new_val
FROM target_table t
JOIN source_table s
ON s.somecol = t.somecol
AND s.othercol < 1
WHERE s.something_else = 'abc'
在此示例中,t.col
是我(最终)想要为其分配新值的列。 (在此处的SELECT语句中使用,它只显示当前存储在列中的值。)
表达式s.expr
表示返回我想要分配给col
的值的表达式。这可以像列引用一样简单,也可以是更复杂的表达式。
声明的其余部分是我们熟悉的普通FROM
,JOIN
,ON
和WHERE
条款。
一旦我有SELECT
语句正常工作,我可以通过
SELECT ... FROM
UPDATE
(在语句开头)
SET
子句之前添加 WHERE
子句。例如,我将上面的SELECT语句转换为类似的内容,将s.expr
的值赋给t.col
:
UPDATE target_table t
JOIN source_table s
ON s.somecol = t.somecol
AND s.othercol < 1
SET t.col = s.expr
WHERE s.something_else = 'abc'
这种方法对我有用。首先将它写为SELECT允许我测试,查看条件和表达式,并检查以确认哪些行将被更新,要替换的值以及将分配给每行的值。