更新表与来自其他表的数据,如果不为null?

时间:2012-11-29 20:26:06

标签: mysql sql sql-update

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

我使用的查询是:

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

哪种工作正常,但列中存在不匹配,

所以我需要添加一个只会在该行上执行更新的子句,如果子查询不返回null。

我该怎么做?

2 个答案:

答案 0 :(得分:5)

您应该只是在这样的连接中进行更新

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的行。

答案 1 :(得分: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中使用旧值并不算作"更新"以任何方式(受影响的行数或记录的更改)