Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Определить столбец в таблице  [new]
irqrib
Member

Откуда:
Сообщений: 5
Приветствую, уважаемое сообщество, прошу вас помочь, поделится советом так как зашел в тупик и не знаю в какую сторону копать.

итак, дано:
есть 3 таблицы
1 таблица "Продукты"
имееет следующие поля
id - идентификатор продукта
Name - наименование продукта
acc_calc - накопительный счет, ID с таблицы счет
acc_tax - счет налога, ID с таблицы счет
acc_rur - рублевый счет, ID с таблицы счет
acc_debt - счет задолженностей, ID с таблицы счет
acc_profit - счет дохода, ID с таблицы счет
и тд

2 таблица "Счета"
имеет следующие поля
Id   - идентификатор
Main - 20 значный номер

3 таблица "Соответствие счетов"
id 
old_acc, ID с таблицы счет
new_acc, ID с таблицы счет


ну мудрствуя лукаво сделал такой Select
select pr.id, acc.id, cb.old_acc, cb.new_acc
from account acc, product pr, prod_account cb
where
     acc.id in (pr.acc_calc
		,pr.acc_tax
		,pr.acc_rur
		,pr.acc_debt
		,pr.acc_profit) 
     and cb.old_acc = acc.id

необходимо:
заменить старые счета на новые. каким образом выявить в каком столбце в таблице продукт подвязан счет и его заменить новым счетом?
19 май 14, 11:10    [16035280]     Ответить | Цитировать Сообщить модератору
 Re: Определить столбец в таблице  [new]
irqrib
Member

Откуда:
Сообщений: 5
update product pr
set
       pr.acc_calc =  (
                           select a.new_acc 
                           from temp_table a
                           where a.old_acc = pr.acc_calc
       ), 
       pr.acc_tax =  (
                           select a.new_acc 
                           from temp_table a
                           where a.old_acc = pr.acc_tax
       ), 
       acc_rur =  (
                           select a.new_acc 
                           from temp_table a
                           where a.old_acc = acc_rur
       ), 
       pr.acc_debt =  (
                           select a.new_acc 
                           from temp_table a
                           where a.old_acc = pr.acc_debt
       ), 
       pr.acc_profit =  (
                           select a.new_acc 
                           from temp_table a
                           where a.old_acc = pr.acc_profit
       )
where pr.id in (
    select 
           pr.id      
    from 
           account acc, 
           product pr
    where 
         acc.id in (pr.acc_calc
		,pr.acc_tax
		,pr.acc_rur
		,pr.acc_debt
		,pr.acc_profit)
);	


решил таким способом, не знаю насколько решение элегантно, но работает
19 май 14, 14:30    [16036792]     Ответить | Цитировать Сообщить модератору
 Re: Определить столбец в таблице  [new]
Elic
Member

Откуда:
Сообщений: 29988
irqrib
но работает
Пока. Магия данных.
19 май 14, 14:40    [16036902]     Ответить | Цитировать Сообщить модератору
 Re: Определить столбец в таблице  [new]
irqrib
Member

Откуда:
Сообщений: 5
я не учел что-то?
19 май 14, 15:43    [16037461]     Ответить | Цитировать Сообщить модератору
 Re: Определить столбец в таблице  [new]
Elic
Member

Откуда:
Сообщений: 29988
irqrib
я не учел что-то?
Меняются не все.
19 май 14, 16:02    [16037627]     Ответить | Цитировать Сообщить модератору
 Re: Определить столбец в таблице  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
irqrib
зашел в тупик и не знаю в какую сторону копать
Обычно паттерн для подобных задач прост: получаешь желаемый набор данных. Мерджишь его в таблицу по rowid.
19 май 14, 16:15    [16037780]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить