用连接结果中的值替换 NULL 值

Replace NULL values with values from join results

我有一个 table,其中列的值可以为 NULL,因为这些记录是过去创建的。但现在我想更新这些记录。 table如下:

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'

这是一个 MySQL 数据库。
TABLE1 中,我想用查询结果的实际工作流程更新 workflowId 的所有 NULL 值:

SELECT workflowId 
FROM table2 as t2, table1 as t1  
WHERE t2.workflowName = t1.workflowName 
and t2.workflowVersion = t1.workflowVersion 
and t2.target = 'master'

另一件需要注意的事情是 TABLE1TABLE2 大得多,并且对 TABLE2 中的每条记录执行该连接的成本很高。理想情况下,我还想减少解析 TABLE1 中所有记录的计算成本,看看它们是否在 TABLE2 中有对应关系并更新它们(与对 TABLE2 中的每个记录执行该连接相反=15=]).
但是,只要我能找到适合我的情况的东西,我就会很高兴。

试试这个:

with cte as(
Select * from TABLE1 where workflowId is null
)
update cte 
set workflowId = table2.workflowId 
from cte inner join TABLE2 on cte.workflowName = table2.workflowName 

您似乎想要 updatejoin:

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;