Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Как обновить данные в таблице БД?
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Как обновить данные в таблице БД?

Страниц (1): [1]
 

1. Exponat - 11 Сентября, 2015 - 15:44:32 - перейти к сообщению
Есть таблица такого вида:
ID NAME STREET HOUSE LIMITWEIGHT
1 Зачепиловка Свердлова 21 30
2 Дымер Ленина 3 30

Каким запросом мне обновить данные в этой таблице? Если данные которые обновляются отсутствуют - то чтоб они добавились. А если в каких то данных поменялось одно значение - то чтоб оно перезаписалось. Это возможно?
2. Мелкий - 11 Сентября, 2015 - 16:11:51 - перейти к сообщению
Возможно, конечно. Вопрос в том, сколько и чего для этого надо делать.
upsert/merge/ON CONFLICT/on duplicate key/replace как простой случай и со своими тараканами. И не предполагают что-то делать с записями, которых больше нет в новом наборе данных.

Более многословный способ, но более гибкий:
begin
create temporary table temptable ON COMMIT DROP
insert в эту временную таблицу всех новых значений
create index on tempname по полям, по которым будем сравнивать

delete from tablename записей, которых нет в новой таблице (ну или апдейт)
insert into tablename .. select from temptable для записей, к которым не нашлось пар в старой таблице
update с inner join'ом для записей. которые есть и там и там
Можно делать в одном cte. Эффективнее ли not exists, left join или один общий full outer join - это надо смотреть на конкретном примере с конкретной базой.
drop temporary table, если ваша субд не умеет on commit drop или его аналог.
commit;

 

Powered by ExBB FM 1.0 RC1