2014-02-14 3 views
1

У меня есть запрос, который я пытаюсь заставить его работать на оракула, но получаю следующую ошибкуOracle - однорядные подзапрос возвращает более одной строки

SQL Error: ORA-01427: однорядные подзапрос возвращает более чем один ряд

Этот запрос:

UPDATE TARGET A 
SET A.COL1=(SELECT B.COL1 FROM SOURCE B) 
WHERE A.COL2=(SELECT B.COL2 FROM SOURCE B) 

в принципе, я пытаюсь обновить только те записи, совпадающие в соединении.

Буду очень благодарен за любую помощь.

ответ

3

Ваше UPDATE заявление должно быть коррелированы update-- вам понадобится ключ A, который говорит вам, какая строка в B идти для того, чтобы восстановить новое значение COL1. Ваш пункт WHERE также должен быть IN или EXISTS, так как ему нужно вернуть несколько строк. Предполагая, что COL2 является ключом (на основе вашего пункта WHERE), я предполагаю, что вы хотите

UPDATE target a 
    SET a.col1 = (SELECT b.col1 
        FROM source b 
        WHERE a.col2 = b.col2) 
WHERE EXISTS(SELECT 1 
       FROM source b 
       WHERE a.col2 = b.col2) 

Если это не то, что вы ищете, отправляя некоторые определения таблицы, выборочные данные, и ожидаемые результаты было бы весьма полезно.

Смежные вопросы