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が存在する行のみを選択するため、nullについて心配する必要はありません。

于 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 に答える