【发布时间】:2021-01-18 07:55:41
【问题描述】:
我有一个大表要更新以匹配字符串。
当前实现使用 case 语句来匹配在 case 中硬编码的多个字符串。
Sample table:
Table1:
pagestring varchar(200),
subclass varchar(50),
update Table1
set subclass = case
when pagestring LIKE ANY ('index%','Store/%') THEN 'Home'
WHEN pagestring LIKE 'chair XX%' THEN 'chairXX'
WHEN pagestring LIKE 'chair %' THEN 'chair'
WHEN pagestring LIKE ANY ('account%','order%') THEN 'order'
WHEN pagestring LIKE 'home/shop%' THEN 'shop'
WHEN pagestring LIKE 'chairleather%' THEN 'chairleather'
WHEN pagestring LIKE ANY('lamp%','light%') THEN 'light'
end
我想检查是否可以将搜索字符串保存在表中并与 Table1 页面字符串匹配,而不是在 case 语句中使用硬代码。
Table2
seq byteint,
searchstring varchar(100),
searchlength integer,
subclass varchar(50)
seq searchstring searchlength subclass
--- -------------- ------------ -----------
1 index 5 Home
2 Store 5 Home
3 chair XX 8 chairXX
4 chair 5 chair
5 account 7 order
6 order 5 order
7 home/shop 9 shop
8 chairleather 12 chairleather
9 lamp 4 light
10 light 5 light
带有“chair XX”的页面字符串必须在检查“chair”之前匹配
【问题讨论】:
-
您应该保留 CASE,您可能会根据 Table2 上的 Select 自动创建它。我使用 SQL UDF 实现了类似的 loopup-CASE,只要查找表上有插入/更新/删除,就会重新创建。
-
@dnoeth 嗨,我正在寻找在我的代码中不使用 UDF 的东西
-
多久运行一次此更新?使用现有的CASE完全没有问题,它比其他任何东西都更有效。
-
@dnoeth 实际上这是一个更大的程序的一部分,该程序每天运行多次。我正在寻找一种不同的方式来添加或更新案例条件
标签: sql sql-update case teradata