Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизировать SQL запрос с Update'ами, PostgreSQL 
V
    Опции темы
RockClimber
Дата 23.6.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



Есть запрос вида
Код

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

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

База - PostgreSQL.


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Magnifico
Дата 23.6.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 23.1.2008
Где: Московская област ь

Репутация: 4
Всего: 17



если обновляемые данные на листочке то никак
если они в таблице то циклом

даю пример , сделал по по оф. доке  http://www.postgresql.org/docs/8.3/interac...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)



--------------------
Всё  в  порядке   -   спасибо  зарядке  !
PM MAIL   Вверх
RockClimber
Дата 24.6.2008, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре

Репутация: нет
Всего: 15



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

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


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0410 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.