Xpoint
   [напомнить пароль]

DBD::SQLite - update нескольких полей в одном запросе

Метки: [без меток]
2007-02-21 17:38:15 [обр] VVZ[досье]

пытаюсь обновить сразу несколько полей в таблице:
$dbh->do("update table set (field1, field2) = (select z.a, z.b from x as z where ...);");
не работает:
DBD::SQLite:db do failed near "(": syntax error(1) at dbdimp.c line 271

Установлен свежий ActivePerl 5.8.8 (win XP) с последним DBD::SQLite.
если делать set field1 = (select z.a from x .... ), то все работает, но если нужно обновить несколько полей, это что, по каждому нужно отдельный запрос делать и, соотв., в разы больше времени ждать?

Что я не так делаю?

спустя 1 час 10 минут [обр] Закиров Руслан(51/343)[досье]
Скорее всего SQLite не поддерживает таких запросов.
спустя 14 часов [обр] Максим Головкин(4/18)[досье]

Если такой зарос не сработает попробуйте сделать так.
создаёте временную табличку tmp_table с заголовком, идентичным таблице table (из вашего запроса).
Туда делаете:

insert into tmp_table (a.field1, a.field2, ...) select z.a, z.b, ... from table as a, x as y where ...

Потом из таблицы table удаляете все записи с теми же Primary key, что в tmp_table.

delete from table where id in (select id from tmp_table)

и вставляете из tmp_table данные в table

insert into table select * from tmp_table

Это будет явно быстрее, хотя и в несколько шагов.

Powered by POEM™ Engine Copyright © 2002-2005