Я создал новую таблицу для моего использования, скажем, t1, в которой есть 8 столбцов. Я заполнил 3 столбца через процедуру. Столбец 1 - это имя. Теперь я хочу заполнить 4-й столбец для соответствующего имени. Это будет обновление с предложением where.Обновление одной таблицы из другой таблицы
Сценарий Я создал запрос, который имеет результат, называя t2, который имеет имя и total_amount. Теперь я хочу заполнить total_amount в 4-й столбец t1.
Подход, который я сейчас выполняю, - это перебирать каждое имя в t1 и находить свой счетчик total_amount в t2 (с предложением) и обновлять значение в t1. Но это занимает бесконечное время. Во-первых, из-за цикла в t1, во-вторых, t2 сам является запросом, который выполняется снова и снова.
Теперь реальная задача намного сложнее, и я только что представил ее суть. Пожалуйста, предложите мне быстрый подход.
create or replace procedure proc
is
temp_value number(18,2);
CURSOR total is
select name, age, sex from data_table where
{conditions};
/*Gives me name and age in 1st and 2nd column and likewise data in 3rd column */
begin
FOR temp IN total LOOP
with aa as (SELECT b.name,
NVL (SUM (c.amount), 0) as total_amount
FROM data_table2 b, data_table3 c
WHERE {joins and groub by}
)
/* This gives me total amount for corresponding name. There is no repetition of name */
select nvl(sum(total_amount),0) into temp_value from aa where name = temp.name;
update t1 set amount = temp_value where name = temp.name;
END LOOP;
END;
/
Вы используете MySQL, MS SQL Server или Oracle здесь? Не помещайте те продукты, которые не задействованы ... – jarlh
можете ли вы представить свои таблицы в схеме? – anatol
@jarlh Я использую Oracle здесь. Извините за теги – Akshay