用连接结果中的值替换 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'
另一件需要注意的事情是 TABLE1
比 TABLE2
大得多,并且对 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
您似乎想要 update
和 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;
我有一个 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'
另一件需要注意的事情是 TABLE1
比 TABLE2
大得多,并且对 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
您似乎想要 update
和 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;