2016-03-11 2 views
-2
UPDATE Table_A 
SET Column_A = 
(SELECT Table_C.Column_C 
FROM 
    Table_A 
INNER JOIN 
    Table_B 
ON 
    Table_A.Column_A1 = Table_B.Column_B 
INNER JOIN 
    Table_C 
ON 
    Table_B.Column_B1 = Table_C.Column_C1 
WHERE 
    Table_C.Column_C2 <> 'T' and 
    Table_C.Column_C3 = 'T' and 
    Table_B.Column_B2 = 'T' and Table_B.Column_B3 = 'xyz'); 

У меня есть подзапрос в скобках, возвращающий 10 значений, которые я хочу обновить с помощью Table_A. Но оператор обновления только хочет одно значение, возвращаемое из подзапроса:Ошибка Oracle SQL - однострочный подзапрос возвращает более одной строки

ORA-01427: однорядные подзапрос возвращает более одной строки

Как я могу обновить несколько строк вместо только один?

Любые темы, которые я видел при этой ошибке, не помогают решить проблему.

EDITED - Будет ли способ сделать это, используя петлю?

+1

Во-первых, это SQL-сервер или Oracle? Во-вторых, просьба привести пример ваших данных (предпочтительно DDL и DML-операторов для таблицы и вставок) и пример вашего ожидаемого результата. – MT0

+0

Пожалуйста, внесите ваше полное заявление тоже – Aleksej

+0

Трудно сказать, не видя, что такое инструкция обновления. Однако, если вы ожидаете более одной строки из подзапроса, тогда используйте «IN» вместо «=» –

ответ

1

Вы должны correlate подзапроса к строке в основном запросе: (. "PKCOLS" быть любой столбец (s) является первичным ключом TABLE_A)

UPDATE Table_A a 
SET Column_A = 
(SELECT Table_C.Column_C 
FROM 
    Table_A 
INNER JOIN 
    Table_B 
ON 
    Table_A.Column_A1 = Table_B.Column_B 
INNER JOIN 
    Table_C 
ON 
    Table_B.Column_B1 = Table_C.Column_C1 
WHERE 
    Table_C.Column_C2 <> 'T' and 
    Table_C.Column_C3 = 'T' and 
    Table_B.Column_B2 = 'T' and Table_B.Column_B3 = 'xyz' 
    AND a.PKCOLS=Table_A.PKCOLS); 

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

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