1

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

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

4

2 回答 2

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';

此外,您应该考虑没有匹配项的情况。

于 2011-06-17T03:39:22.583 回答
0

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

您需要更正返回多个不同值的情况。这可能是一个聚合函数,比如MAXor MIN,但如果没有细节,我会犹豫提出这个建议。

于 2011-06-17T03:36:33.563 回答