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

Posted

技术标签:

【中文标题】如何匹配最长的字符串并更新值?【英文标题】:How to match the longest string and update the value? 【发布时间】:2011-06-17 03:32:05 【问题描述】:

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

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

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

这是我的查询

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: 单行子查询返回多于一行

【问题讨论】:

你有两个问题,a)子选择返回多行; A.stack1 in ( 应该解决这个问题。 b) 您不能更新具有将在子选择中使用的值的表(这可能仅在您的子选择包含您正在更新的表时)。 【参考方案1】:

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

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

另外,你应该考虑没有匹配的情况。

【讨论】:

非常感谢,它有效:) 如何将此问题标记为已回答? @sailaja:点击答案左侧箭头下方的复选标记。 MAX 不返回最长的,它返回最大值。您需要在长度与 table2 中 stack2 的 MAX 长度匹配的子查询中从 table2 返回 stack2。 (您仍然需要 MAX 或 MIN 返回值,因为可能有超过 1 个具有最大长度的字符串。) @Datajam Ltd:如果它们都共享相同的前缀,则 MAX 返回最长的字符串(就像他们在此处所做的那样)。【参考方案2】:

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

您需要更正返回多个不同值的情况。可以使用聚合函数,例如 MAXMIN,但如果没有详细信息,我会犹豫提出该建议。

【讨论】:

用这个查询得到 ORA-00927: missing equal sign error

以上是关于如何匹配最长的字符串并更新值?的主要内容,如果未能解决你的问题,请参考以下文章

Java 最长子序列和最长子串

Redshift:如何从字符串列表中匹配最长的正则表达式字符串

如何匹配字符串元素并更新plist中相应的响应字符串?

《LeetCode之每日一题》:149.通过删除字母匹配到字典里最长单词

如何在 MySQL 中运行更新查询并替换匹配的字符串

524. 通过删除字母匹配到字典里最长单词