powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопрос с UPDATE в таблице.
11 сообщений из 11, страница 1 из 1
Вопрос с UPDATE в таблице.
    #36525236
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет
Мне нужно вытащить данные из таблицы базы данных DA и обновить только те данные в другой таблице, базы данных MM, которые в которой данные в поле num_vag совпадают.

начал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
connect to da user as using a1s2;

export to asoup.dbf_arenda.ixf of ixf
select 
       integer(aren.vagon),
	   cast(substr(char(aren.daten), 1 , 4 ) ||'-'|| substr(char(aren.daten), 5 , 2 ) ||'-'|| substr (char (aren.daten), 7 , 2 ) as date)   
from t_layer.dbf_arenda aren;

connect reset;

connect to MM user as using  111 ;
...

Здесь все работает. Данныеиз таблицы выгружаются в ixf файл и открывается доступ к базе MM.
Теперь как мне посадить эти данные в таблицу ASOUP.AK (структура таблицы дана ниже) причем необходимо сравнить по полю VAG_NUM и aren.vagon записи в двух таблицах и посадить данные с поля aren.daten из выгруженной таблицы в поле AREN_DATE только туда где записи по этим полям совпадают.

CREATE TABLE ASOUP.AK
(VAG_NUM INTEGER NOT NULL,
URV CHARACTER(2) NOT NULL,
STR SMALLINT NOT NULL,
DOR SMALLINT NOT NULL,
AREN_DATE DATE
)
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36525442
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Azeke,

Добрый день.

Импортируйте данные (команды import или load) из файла в промежуточную таблицу базы MM и делайте соответствующий update (или merge) на ASOUP.AK, используя эту таблицу.
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36525491
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я тож так подумал.
тогда после импорта как сделать правельно запрос

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE TABLE ASOUP.tmp_arenda
 (VAG_NUM    INTEGER         NOT NULL, 
  AREN_DATE  DATE) 




alter table ASOUP.tmp_arenda
activate not logged initially with empty table;

import from asoup.dbf_arenda.ixf of ixf
insert into ASOUP.tmp_arenda;


update ASOUP.AK
set AREN_DATE = (select t1.aren_daten
                          from asoup_tmp_arenda t1
                          where t1.num_vag=num_vag)
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36525667
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, если вы не хотите, конечно, затереть дату в тех asoup.ak.vag_num, которых нет в ASOUP.tmp_arenda.vag_num

Надо:
Код: plaintext
1.
2.
3.
4.
merge into ASOUP.AK a
using ASOUP.tmp_arenda t1 on t1.vag_num=a.vag_num
when matched then 
update set AREN_DATE=t1.aren_date
Ну и, конечно, всё это будет работать, если значения в ASOUP.tmp_arenda.vag_num - уникальные.
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36525862
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein Ваш запрос дал ошибку при выполнении:


200 rows updated because of ERROR.
[DB2/NT] SQL0788N Одна и та же строка таблицы назначения "ASOUP.AK" указана несколько раз для операции изменения, удаления или вставки в операторе MERGE. SQLSTATE=21506
*** Execution stopped due to error ***
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36525983
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Azeke,

Что выдаёт
Код: plaintext
1.
2.
3.
select vag_num 
from ASOUP.tmp_arenda
group by vag_num
having count( 1 )> 1 
?
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36526009
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выдает 1194 записи.
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36526058
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Azekeвыдает 1194 записи.Т.е. у вас по 1194 VAG_NUM дублирующиеся значения в ASOUP.tmp_arenda.
Типа
ASOUP.tmp_arenda:
Код: plaintext
1.
2.
3.
4.
vag_num | aren_date
--------|-----------
1       | 2010-01-01
1       | 2010-01-02
...     | ...
Какую же именно дату из каждого дублирующегося занчения вам надо записать для соотв. ASOUP.AK.VAG_NUM?
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36526104
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein да я понял что дубли идут в таблице ASOUP.tmp_arenda.
мне нужны последние данные то есть с большей датой в поле aren_date.
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36526139
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AzekeMark Barinstein да я понял что дубли идут в таблице ASOUP.tmp_arenda.
мне нужны последние данные то есть с большей датой в поле aren_date.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
merge into ASOUP.AK a
using (
select vag_num, max(aren_date) aren_date
from ASOUP.tmp_arenda 
group by vag_num
) t1 on t1.vag_num=a.vag_num
when matched then 
update set AREN_DATE=t1.aren_date
...
Рейтинг: 0 / 0
Вопрос с UPDATE в таблице.
    #36544460
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein спасибо за помощь я сделал проще создал еще одну таблицу временно в нее посадил данные из ASOUP.AK и левым внешним обьединением добавил данные из ASOUP.tmp_arenda, а потом предворительно почистив таблицу ASOUP.AK посадил в нее результат. Долго зато работает.
Пока для меня merge into сложновато буду изучать DB2 дальше :-)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Вопрос с UPDATE в таблице.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]