UPDATE t1
LEFT JOIN
t2
ON t2.id = t1.id
SET t1.col1 = newvalue
WHERE t2.id IS NULL
Note that for a SELECT
it would be more efficient to use NOT IN
/ NOT EXISTS
syntax:
SELECT t1.*
FROM t1
WHERE t1.id NOT IN
(
SELECT id
FROM t2
)
See the article in my blog for performance details:
- Finding incomplete orders: performance of
LEFT JOIN
compared toNOT IN
Unfortunately, MySQL
does not allow using the target table in a subquery in an UPDATE
statement, that’s why you’ll need to stick to less efficient LEFT JOIN
syntax.