Basically what I want to do is copy the value of a column from one table to another column in another table.
The query I am using is:
UPDATE t1
SET product_code =
(SELECT `value` FROM t2 WHERE t2.variant_id = t1.variant_id AND key_id = 10);
Which is working fine, but there is a mismatch in columns,
so I need to add in a clause which will only do the update on that row, if the subquery does not return null.
How can I do this?
You should just being doing the update across a join like this
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
There is no need to worry about nulls in that case as the inner join will only select rows where the variant_id exists in both tables.
Use the old value if the query returns null
:
UPDATE t1
SET product_code =
ifnull(
(SELECT `value` FROM t2 WHERE t2.variant_id = t1.variant_id AND key_id = 10),
product_code);
FYI, in mysql using the old value doesn't count as an "update" in any way (either the number of rows affected or the logged changes)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With