2015-07-06 5 views
0

Я пытаюсь обновить столбец в одной таблице со значениями, содержащимися в столбце из другой таблицы. Я пробовал следующее, но он дает мне ошибку, говоря, что он возвращает более одной строки.Как обновить таблицу на основе значений в другой таблице?

update Table1 set description1 = (select description2 from Table2) 
where customer_id in (select customer_id from Table2);  

Любые указания?

+0

Можете ли вы объяснить больше, что вы пытаетесь сделать? Причиной является первый подзабор, '(выберите descriptrion2 из Table2)'. –

+0

В основном то, что я пытаюсь сделать, это сделать описание столбца1 в таблице 1 равным описанию столбца2 в таблице2. Каждая строка в обеих таблицах имеет столбец customer_id, который идентичен. –

ответ

1

Чтобы выполнить коррелированное обновление, ваш подзапрос должен вернуть одну строку. Почти всегда, вы делаете это, сопоставляя ключ, который сообщает вам, какая строка из table2 отображает в какую строку от table1. Если предположить, что обе таблицы имеют столбец с именем key, который является уникальным

UPDATE table1 t1 
    SET description = (SELECT t2.description2 
         FROM table2 t2 
         WHERE t1.key = t2.key) 
WHERE t1.customer_id IN (SELECT t2.customer_id 
          FROM table2) 
+0

Я думаю, что OP пытается использовать client_id как ключ, но делает неправильное соединение – Spidey

+0

@Nimesh - в этом случае 'key' будет заменен' customer_id' в реальном запросе. С другой стороны, 'customer_id' может быть частью ключа, а не полного ключа. –

0

кажется select description2 from Table2 возвращается более одной строки. Поскольку Oracle не знает, какое значение (description) точно обновится.

Используйте WHERE CLAUSE и отфильтруйте строки до 1, если вы хотите обновить все значения до того же значения (description) .Проверьте и запустите, если запрос select description2 from Table2 возвращает только 1 строку.

Else использовать ключи для коррелированного обновления, как это предлагает Justin Cave.

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