Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Оптимизировать SQL запрос с Update'ами


Автор: RockClimber 23.6.2008, 16:03
Есть запрос вида
Код

update table1 set field1 = 123, field2 = 456, field3 = 789 where field4 = 12345

И таких строк - 10000, различаются только значениями. В таблице - порядка 25000 строк.
Есть способ лучше, чем просто тупое последовательное выполнение 10000 запросов?

База - PostgreSQL.

Автор: Magnifico 23.6.2008, 17:46
если обновляемые данные на листочке то никак
если они в таблице то циклом

даю пример , сделал по по оф. доке  http://www.postgresql.org/docs/8.3/interactive/plpgsql-control-structures.html

Код

CREATE TABLE table1
(
  field1 integer,
  field2 integer,
  field3 integer,
  field4 integer
)
---------------------------
CREATE TABLE table2
(
  field1 integer,
  field2 integer,
  field3 integer,
  field4 integer
)
-------------------------------
insert into table1
select 1,1,1,1 union all
select 1,1,1,2 union all
select 1,1,1,3 union all
select 1,1,1,4 union all
select 1,1,1,5 union all
select 1,1,1,6 union all
select 1,1,1,7 
--------------------------------
insert into table2
select 2,2,2,1 union all
select 3,3,3,2 union all
select 4,4,4,3 union all
select 5,5,5,4 union all
select 6,6,6,5 union all
select 7,7,7,6 union all
select 8,8,8,7 
---------ф-я обновления 1 таблицы данные берем из второй------------------------------------

CREATE OR REPLACE FUNCTION process() RETURNS setof record AS
$BODY$
DECLARE
rec RECORD;
BEGIN
FOR rec IN select field1,field2,field3,field4  from table2
LOOP
update table1 set field1 = rec.field1, field2 = rec.field2, field3 = rec.field3 where field4 = rec.field4;
RETURN NEXT rec; 
END LOOP;
Return;
END
$BODY$
LANGUAGE 'plpgsql' ;
-------вызываем -----------------------------
select * from process() as (field1 int ,field2 int,field3 int,field4 int)

Автор: RockClimber 24.6.2008, 08:02
Цитата(Magnifico @  23.6.2008,  17:46 Найти цитируемый пост)
если обновляемые данные на листочке

Да, на листочке. Но на "листочке" Excel, как с него быстро загрузить в отдельную таблицу, я вроде знаю...
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)