繁体   English   中英

如何匹配最长的字符串并更新值?

[英]How to match the longest string and update the value?

我需要比较和匹配两个不同表中两个字符串的最长匹配项,如果存在最接近的匹配项,则更新一个值。

Table 1     Table 2
stack1     stack2
ABCDEFG    ABC
GHIJKLM    ABCDE
PQRSUVW    ABCDEF

我需要比较这两个表并匹配一个壁橱,并将表1第一行更新为最接近的匹配ABCDEF,请有人帮帮我。 我被困在这里。

这是我的查询

UPDATE table1 A 
   SET A.stack1 = (SELECT DISTINCT B.stack2 
                     FROM table2 B 
                    WHERE A.stack1 LIKE CONCAT(B.stack2,'%')) 
 WHERE name = 'name';

此查询正在收到一个错误,称为

ORA-01427:单行子查询返回多个行

您需要使子查询仅返回一个匹配项(最长的匹配项)。 以您的情况,MAX应该这样做。

UPDATE table1 A 
SET A.stack1 = (SELECT Max( B.stack2 )
                 FROM table2 B 
                WHERE A.stack1 LIKE CONCAT(B.stack2,'%')) 
WHERE name = 'name';

另外,您应该考虑什么都不匹配的情况。

ORA-01427错误表示子查询返回多个值-即使使用DISTINCT

您需要更正返回多个不同值的案例。 可能有一个汇总函数,例如MAXMIN ,但是由于没有细节,我会毫不犹豫地提出建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM