4

基本上我想要做的是将一个表中的列的值复制到另一个表中的另一列。

我正在使用的查询是:

UPDATE t1 
SET product_code = 
(SELECT `value` FROM t2 WHERE t2.variant_id = t1.variant_id AND key_id = 10);

哪个工作正常,但列不匹配,

所以我需要添加一个子句,如果子查询不返回null,它只会对该行进行更新。

我怎样才能做到这一点?

4

2 回答 2

8

您应该像这样在连接中进行更新

UPDATE
t1 INNER JOIN t2 ON t1.variant_id = t2.variant_id
SET t1.product_code = t2.value
WHERE t2.key_id = 10
AND t2.value IS NOT NULL

在这种情况下无需担心空值,因为内连接只会选择两个表中都存在 variant_id 的行。

于 2012-11-29T20:33:03.837 回答
4

如果查询返回,则使用旧值null

UPDATE t1 
SET product_code = 
ifnull(
    (SELECT `value` FROM t2 WHERE t2.variant_id = t1.variant_id AND key_id = 10), 
    product_code);

仅供参考,在 mysql 中使用旧值不会以任何方式算作“更新”(受影响的行数或记录的更改)

于 2012-11-29T20:27:51.550 回答