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

Hai*_*ood 3 mysql sql sql-update

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

我使用的查询是:

UPDATE t1 
SET product_code = 
(SELECT `value` FROM t2 WHERE t2.variant_id = t1.variant_id AND key_id = 10);
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能做到这一点?

Boh*_*ian 5

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

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

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


Mik*_*ant 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
Run Code Online (Sandbox Code Playgroud)

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