2014-10-27 3 views
0

Я пытаюсь обновить columnA в таблицеA. Новые значения ColumnA извлекаются из tableB ColumnB, используя столбец a в качестве идентификатора. Я использую следующие запросы, но я не могу обновить таблицу.обновить столбец с другим столбцом таблицы в sql с тем же столбцом, что и идентификатор

update tableA a set columnA = (select b.columnB from tableb b where b.columnC = a.columnA) 
where exists (select * from tableb b where b.columnC = a.columnA) and a.columnD = 'ABC' 

Для приведенного выше запроса я получаю исключение «однорядные подзапрос возвращает более одной строки»

update tableA a set a.columnA = b.columnB from tableb b on a.columnA = b.columnC where a.columnD = 'ABC' 

Для приведенного выше запроса я получаю исключение «команда SQL не должным образом закончилась»

update a set a.columnA = b.columnB from tablea a inner join tableb b on a.columnA=b.columnC where a.columnD = 'ABC' 

Для приведенного выше запроса я получаю исключение «команду SQL не правильно закончился»

+0

возможно дубликат [Как обновить одно табличное значение столбца со значениями столбца другой таблицы?] (http://stackoverflow.com/questions/4378847/how-to-update-one-table-column-values-with-another-tables-column-values) – OldProgrammer

ответ

0

Я думаю, ваша проблема в том, что у вас несколько строк в таблицеB, которые соответствуют («где b.columnC = a.columnA»). Поэтому, когда вы сообщаете Oracle:

set columnA = (
select b.columnB 
from tableb b 
where b.columnC = a.columnA) 
where exists ... 

его поиск нескольких строк в таблицеB для заданного значения ключа. Вам нужно будет решить, как вы хотите, чтобы Oracle выбрал только один. Например, если вы на самом деле не волнует, какой из нескольких значений, вы могли бы сделать что-то вроде (непроверенные):

set columnA = (
select distinct(max(b.columnB)) 
from tableb b 
where b.columnC = a.columnA) 
where exists ... 
Смежные вопросы