Как сопоставить самую длинную строку и обновить значение? - PullRequest
1 голос
/ 17 июня 2011

Мне нужно сравнить и сопоставить самое длинное совпадение двух строк в двух разных таблицах и обновить одно значение при ближайшем совпадении.

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: однострочный подзапрос возвращает более одной строки

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Вам нужно, чтобы подзапрос возвращал только одно совпадение (самое длинное).В вашем случае MAX должен сделать это.

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

Также вам следует подумать о случае, когда ничто не соответствует.

0 голосов
/ 17 июня 2011

Ошибка ORA-01427 говорит о том, что подзапрос возвращает более одного значения - даже с DISTINCT.

Вам необходимо исправить регистр (ы), которые возвращают более одного отдельного значения. Это может быть с агрегатной функцией, такой как MAX или MIN, но без подробностей я не решаюсь сделать эту рекомендацию.

...