根据 MySQL 中加入的结果更新 table
update a table based on the outcome of a join in MySQL
我理解这里的语法:
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?
我似乎无法弄清楚,而且我在所有尝试中都遇到了语法错误。非常感谢任何建议。
MySQL 中的语法是:
UPDATE table1 JOIN
table2
ON conditions
SET table1.column1 = table2.expression1
WHERE conditions;
我所做的是先将其写成 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
表示returns我要赋值给col
的表达式。这可以像列引用一样简单,也可以是更复杂的表达式。
语句的其余部分是我们熟悉的普通 FROM
、JOIN
、ON
和 WHERE
子句。
一旦我有一个有效的 SELECT
语句,我可以通过
将它转换成一个 UPDATE 语句
- 用关键字
UPDATE
[=49] 替换 SELECT ... FROM
(在语句的开头) =]
- 在
WHERE
子句之前添加一个 SET
子句。
例如,我会将上面的 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 首先允许我测试、处理条件和表达式,并检查以验证哪些行将被更新,哪些值将被替换,以及将分配给每个行的值是什么行。
我理解这里的语法:
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?
我似乎无法弄清楚,而且我在所有尝试中都遇到了语法错误。非常感谢任何建议。
MySQL 中的语法是:
UPDATE table1 JOIN
table2
ON conditions
SET table1.column1 = table2.expression1
WHERE conditions;
我所做的是先将其写成 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
表示returns我要赋值给col
的表达式。这可以像列引用一样简单,也可以是更复杂的表达式。
语句的其余部分是我们熟悉的普通 FROM
、JOIN
、ON
和 WHERE
子句。
一旦我有一个有效的 SELECT
语句,我可以通过
- 用关键字
UPDATE
[=49] 替换SELECT ... FROM
(在语句的开头) =] - 在
WHERE
子句之前添加一个SET
子句。
例如,我会将上面的 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 首先允许我测试、处理条件和表达式,并检查以验证哪些行将被更新,哪些值将被替换,以及将分配给每个行的值是什么行。