2015-10-22 5 views
1

У меня есть две таблицы, из которых один столбец/поле одинаково в обеих таблицах, мне нужно обновить таблицу A данными из таблицы B. Здесь значение таблицы Ax необходимо брать и сравнивать с Bw, а значение эквивалентности Bz необходимо обновить в Ax х значение отличается от x1, x2 и т.д .. поэтому каждое значение должно быть принято и по сравнению с ш в таблице В и значения, что эквивалентно г должны быть обновлены в х, x1, x2 и т.д. в таблице А.Каков правильный способ уменьшить несколько операторов обновления в oracle

Table A (columns j, x, x1,x2,x3..x20 and so on) 
--------- 

j x x1 x2 ..x20 and y y1 y2 .. y20 




Table B (columns w and z) 
-------- 
w z 



UPDATE TableA a SET a.x = (SELECT b.w 
     FROM TableB b 
     WHERE a.x = b.z) 
WHERE a.j='somevalue'; 

Если я напишу так, мне нужно написать 40 инструкций по обновлению, есть ли простой способ сделать эти обновления.

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

Спасибо, Ашраф

+0

Вы говорите, что у вас есть целая куча столбцов, которые должны быть одинаковыми в таблицах A и B? –

+0

куча колонок в TABLEA необходимо сравнить в справочной таблице таблицы B. Таким образом, здесь им по сравнению с Ax Bw, а затем принимать эталонное значение Bz и обновляя его обратно в Ax. Так что здесь Ax, потребности A.x1..A.x20 для сравнения и обновления обратно в таблицу со ссылочными значениями в таблице B – blackpanther

+0

На первый взгляд это выглядит как ужасный дизайн базы данных. Кажется, x1, x2, ... лучше быть строками, чем столбцами. В любом случае, как выглядят обновления для x1, x2 и т. Д. * Точно так же, как и для x, поэтому я просто заменяю x на x1 и т. Д.? –

ответ

0

Как A.x имеет другое значение, как a.x1 и a.x2 и т.д. Вам необходимо подзапрос за значение, конечно, потому что это разные типы записей, которые вы хотите найти.

UPDATE TableA a 
SET a.x = (SELECT b.w FROM TableB b WHERE a.x = b.z) 
    , a.x1 = (SELECT b.w FROM TableB b WHERE a.x1 = b.z) 
    , a.x2 = (SELECT b.w FROM TableB b WHERE a.x2 = b.z) 
    ... 
WHERE a.j = 'somevalue'; 

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

+0

Thankyou! @ThorstenKettner – blackpanther

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