Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Q? ASA9 Как сравнить записи? / 16 сообщений из 16, страница 1 из 1
27.04.2006, 09:13
    #33693315
v_smirnov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
Задача на первый взгляд простая.
Есть две таблицы одинаковой структуры.

Требуется сравнить данне в одной таблицы с другой и в случае если они (данные) не совпадают (отсутствует запись, новая, изменена) то заменить запись.

немного сумбурно но принцип ясен.

Проблема заключается в том что если сравнивать построчно - по полям то это занимает очень много времени - есть способ сравнить быстро? Более того - не важно какое поле изменилось - важен только факт что строки не равны
...
Рейтинг: 0 / 0
27.04.2006, 09:25
    #33693341
Владимор Конев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
Тынц
...
Рейтинг: 0 / 0
27.04.2006, 09:46
    #33693390
v_smirnov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
Владимор КоневТынц

не совсем понял вышего ответа. что такое except я знаю.
Но как он относиться к моему вопросу не уразумел.
...
Рейтинг: 0 / 0
27.04.2006, 09:55
    #33693411
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
Более правильный тынц - RTFM
Что-то типа такого:
Код: plaintext
1.
2.
3.
INSERT  INTO  table1 ( column-name, ... ) 
ON EXISTING  UPDATE 
select ( column-name, ... )  from table2
...
Рейтинг: 0 / 0
27.04.2006, 11:11
    #33693685
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
А кто вам сказал, что это ASA ?
...
Рейтинг: 0 / 0
27.04.2006, 11:14
    #33693695
Александр Гoлдун
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
MasterZiv пишет:
> А кто вам сказал, что это ASA ?

Заголовок топика "Q? ASA9 Как сравнить записи?"
С добрым утром
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
27.04.2006, 11:43
    #33693832
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
Пардон, пардон...
...
Рейтинг: 0 / 0
27.04.2006, 22:24
    #33695931
Анатолий Иванов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
Александр ГoлдунБолее правильный тынц - RTFM
Что-то типа такого:
Код: plaintext
1.
2.
3.
INSERT  INTO  table1 ( column-name, ... ) 
ON EXISTING  UPDATE 
select ( column-name, ... )  from table2

Если бы все было так просто (v_smirnov знает ;-) ).
А теперь усложняем задачу: в table1 есть поле last_modified timestamp default timestamp и оно не должно меняться если записи в table1 и table2 идентичны.
...
Рейтинг: 0 / 0
27.04.2006, 22:45
    #33695948
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
Анатолий ИвановА теперь усложняем задачу: в table1 есть поле last_modified timestamp default timestamp и оно не должно меняться если записи в table1 и table2 идентичны.А если не должна меняться, то использовать надо ON EXISTING SKIP. Все не просто, а намного проще :)
...
Рейтинг: 0 / 0
27.04.2006, 23:40
    #33695987
Анатолий Иванов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
White Owl Анатолий ИвановА теперь усложняем задачу: в table1 есть поле last_modified timestamp default timestamp и оно не должно меняться если записи в table1 и table2 идентичны.А если не должна меняться, то использовать надо ON EXISTING SKIP. Все не просто, а намного проще :)
Не должна только в идентичной записи, а так не обновится ничего.
...
Рейтинг: 0 / 0
28.04.2006, 18:23
    #33698402
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
Анатолий Иванов White Owl Анатолий ИвановА теперь усложняем задачу: в table1 есть поле last_modified timestamp default timestamp и оно не должно меняться если записи в table1 и table2 идентичны.А если не должна меняться, то использовать надо ON EXISTING SKIP. Все не просто, а намного проще :)
Не должна только в идентичной записи, а так не обновится ничего.А что такое "идентичная запись"?
...
Рейтинг: 0 / 0
30.04.2006, 20:22
    #33699889
Анатолий Иванов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
White Owl Анатолий Иванов White OwlА если не должна меняться, то использовать надо ON EXISTING SKIP. Все не просто, а намного проще :)
Не должна только в идентичной записи, а так не обновится ничего.А что такое "идентичная запись"?
Совпадают все поля, кроме last_modified, поскольку такое поле есть только в table2 и служит оно только для отражения изменения записи (необходимо для timestamp-синхронизации Mobilink)
...
Рейтинг: 0 / 0
01.05.2006, 17:46
    #33700370
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create table t1 (
   pk1 char( 10 ) not null primary key,
   f1 char( 10 ),
   f2 char( 10 ),
   lastchange timestamp null default timestamp);
create table t2 (
   pk1 char( 10 ) not null primary key,
   f1 char( 10 ),
   f2 char( 10 ),
   lastchange timestamp null default timestamp);
-------

-- если хочешь чтобы t1.lastchange совпадал с t2.lastchange:
insert into t1 on existing update
  select pk1, f1, f2, lastchange from t2;
-- если хочешь чтобы t1.lastchange отражал реальную дату обновления/добавления записи:
insert into t1 (pk1, f1, f2) on existing update
  select pk1, f1, f2 from t2;
Все.
...
Рейтинг: 0 / 0
12.05.2006, 21:05
    #33724181
Анатолий Иванов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
White Owl
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create table t1 (
   pk1 char( 10 ) not null primary key,
   f1 char( 10 ),
   f2 char( 10 ),
   lastchange timestamp null default timestamp);
create table t2 (
   pk1 char( 10 ) not null primary key,
   f1 char( 10 ),
   f2 char( 10 ),
   lastchange timestamp null default timestamp);
-------

-- если хочешь чтобы t1.lastchange совпадал с t2.lastchange:
insert into t1 on existing update
  select pk1, f1, f2, lastchange from t2;
-- если хочешь чтобы t1.lastchange отражал реальную дату обновления/добавления записи:
insert into t1 (pk1, f1, f2) on existing update
  select pk1, f1, f2 from t2;
Все.
Опять не то.
Есть допустим клиент 1, 2 и 3 в таблице 1 и клиент 1, 2 и 3 в таблице 2.
В таблице 1 есть поле даты и времени изменения записи.
В таблице 2 поля даты и времени изменения записи нет.
Клиент 1 имеет одинаковое содержимое полей в таблице 1 и 2.
Клиент 2 имеет разное содержимое полей в таблице 1 и 2.
Клиент 3 отсутствует в таице 1 и присутствует в таблице 2.
Задача: сделать так, чтобы в таблице 1 клиент 2 был по содержимому полей таким же как в таблице 2, при этом поле изменения записи для клиента 1 в таблице 1 не должно измениться. Клиент 3 должен появиться в таблице 1 с текущим временем и датой в поле измения записи. Информационных полей у клиента много.
...
Рейтинг: 0 / 0
13.05.2006, 12:14
    #33724524
TIB
TIB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
... если полей много и лень их сравнивать, то можно изменить в table1 default timestamp на default current timestamp (т.е. при update'ах оно не будет автоматом меняться) и навесить триггер AFTER UPDATE, в котором обновлять timestamp-поле (триггер не сработает, если не было update'а хотя-бы одного поля таблицы). В такой конфигурации можно пользоваться предложенной выше конструкцией типа
insert into table1(cl_id,f1,f2,f3) on existing update
select cl_id,f1,f2,f3 from table2
...
Рейтинг: 0 / 0
15.05.2006, 12:58
    #33726846
Анатолий Иванов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Q? ASA9 Как сравнить записи?
TIB... если полей много и лень их сравнивать, то можно изменить в table1 default timestamp на default current timestamp (т.е. при update'ах оно не будет автоматом меняться) и навесить триггер AFTER UPDATE, в котором обновлять timestamp-поле (триггер не сработает, если не было update'а хотя-бы одного поля таблицы). В такой конфигурации можно пользоваться предложенной выше конструкцией типа
insert into table1(cl_id,f1,f2,f3) on existing update
select cl_id,f1,f2,f3 from table2
М-да... А так хотелось без триггеров обойтись. Сейчас у меня все обновляемые таблицы, участвующие в обмене по Mobilink, не имеют триггеров вообще, все делается в процедуре и легко контролировать весь процесс и менять его.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Q? ASA9 Как сравнить записи? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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