I have a table where the value of a column can be NULL because those records have been created in the past. But now I would like to update those records. The tables are as follows:
TABLE 1 id | workflowId | workflowName | workflowVersion 1 | NULL | 'name-1' | 2 2 | NULL | 'name-1' | 3 3 | NULL | 'name-1' | 3 4 | NULL | 'name-1' | 3 5 | 2 | 'name-2' | 1 TABLE2 workflowId | workflowName | workflowVersion | target 1 | 'name-1' | 2 | 'master' 2 | 'name-1' | 3 | 'master' 3 | 'name-1' | 4 | 'something' 4 | 'name-2' | 1 | 'master'
It’s a MySQL database.
In TABLE1 I would like to update all the NULL values for workflowId with the actual workflow with the result of the query:
SELECT workflowId FROM table2 as t2, table1 as t1 WHERE t2.workflowName = t1.workflowName and t2.workflowVersion = t1.workflowVersion and t2.target = 'master'
Another thing to notice is that TABLE1 is much bigger than TABLE2, and executing that join for each record in TABLE2 has a big cost. Ideally, I would like also to reduce the computational costs in parsing all the records in TABLE1, see if they have correspondences in TABLE2 and to update them (as opposite of executing that join for each record in TABLE2).
However, as long as I can find something that works for my case I would be happy.
Advertisement
Answer
You seem to want an update with join:
update table1 t1 join
table2 t2
on t2.workflowName = t1.workflowName and
t2.workflowVersion = t1.workflowVersion
set t1.workflowId = t2.workflowId
where t2.target = 'master' and t1.workflowId is null;