如何在高效查询中快速批量更新值



我有三个表包含相同的列Report Year

我想更新任何没有描述的报告年份。例如,查看下面的示例数据,您可以看到有些年份没有任何后缀,例如6+6或7+5。

那些没有后缀的年份只是独立的(即2020年、2021年等(,我想给它们加一个后缀"LTP";,所以它们会变成"2020 LTP"、"2021 LTP"等。。。那些是独立年份但以字符开头的年份,如BP19,不应更新!

伪查询:

UPDATE table1, table2, table3
SET 
[Report Year] = [Report Year].append(' LTP')
WHERE
[Report Year].count < 5;

我在伪代码中使用count作为条件,因为这是我唯一能想到的让查询足够智能的方法,可以识别哪些年份有后缀,哪些年份没有后缀,这样它就可以相应地附加后缀"LTP"。如果有更好的方法,我很想看看:(

报告年度列中的样本值:

表1(将报告年份作为主键,因此仅限唯一/不同值(:

Report Year
2020 5+7
BP19
2020
2020 6+6
2020 7+5
2021
2022 4+8
2022 
2022

表2:

Report Year
2020
2020
2020
2020 6+6
2021
2022 4+8
2022 BP
2022
2020 6+6
2020
2020 6+6
2021
2022 4+8
2022
2022 
2022

表3:

Report Year
2020 5+7
2020 5+7
2020
2020
BP19
2020
2020 6+6
2020 7+5
2021
2022 4+8
2022 
2022
2020 6+6
2020 6+6
2020 7+5
2021
2022 4+8
2022 
2022 

您的伪代码翻译为四个update语句:

update table1
set [Report Year] = concat([Report Year], ' LTP')
where len([Report Year]) = 4;
update table2
set [Report Year] = concat([Report Year], ' LTP')
where len([Report Year]) = 4;
update table3 ...
update table4 ...

逻辑是识别报告年份仅为4个字符的记录,然后附加字符串";LTP";。这4个表中的每一个都独立于其他表,因此运行4个查询是正确的方法。


如果要筛选只包含数字而不是由4个字符组成的报告年份,请使用not like和模式匹配:

where [Report Year] NOT LIKE '%[^0-9]%'

此短语为:报告年度不应包含任何非数字字符。

要确保[Report Year]列只包含4位年份而不包含后缀,可以测试以确保4个字符以1或2开头,其余3个字符为[0-9]。像这样的

update table1
set [Report Year] = concat([Report Year], ' LTP')
where [Report Year] like '[1-2][0-9][0-9][0-9]';
update table2
set [Report Year] = concat([Report Year], ' LTP')
where [Report Year] like '[1-2][0-9][0-9][0-9]';
update table3 ...
update table4 ...

最新更新