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

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

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

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

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

Заголовок топика "Q? ASA9 Как сравнить записи?"
С добрым утром
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Q? ASA9 Как сравнить записи?
    #33693832
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, пардон...
...
Рейтинг: 0 / 0
Q? ASA9 Как сравнить записи?
    #33695931
Фотография Анатолий Иванов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Г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
Q? ASA9 Как сравнить записи?
    #33695948
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ИвановА теперь усложняем задачу: в table1 есть поле last_modified timestamp default timestamp и оно не должно меняться если записи в table1 и table2 идентичны.А если не должна меняться, то использовать надо ON EXISTING SKIP. Все не просто, а намного проще :)
...
Рейтинг: 0 / 0
Q? ASA9 Как сравнить записи?
    #33695987
Фотография Анатолий Иванов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Анатолий ИвановА теперь усложняем задачу: в table1 есть поле last_modified timestamp default timestamp и оно не должно меняться если записи в table1 и table2 идентичны.А если не должна меняться, то использовать надо ON EXISTING SKIP. Все не просто, а намного проще :)
Не должна только в идентичной записи, а так не обновится ничего.
...
Рейтинг: 0 / 0
Q? ASA9 Как сравнить записи?
    #33698402
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Иванов White Owl Анатолий ИвановА теперь усложняем задачу: в table1 есть поле last_modified timestamp default timestamp и оно не должно меняться если записи в table1 и table2 идентичны.А если не должна меняться, то использовать надо ON EXISTING SKIP. Все не просто, а намного проще :)
Не должна только в идентичной записи, а так не обновится ничего.А что такое "идентичная запись"?
...
Рейтинг: 0 / 0
Q? ASA9 Как сравнить записи?
    #33699889
Фотография Анатолий Иванов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Анатолий Иванов White OwlА если не должна меняться, то использовать надо ON EXISTING SKIP. Все не просто, а намного проще :)
Не должна только в идентичной записи, а так не обновится ничего.А что такое "идентичная запись"?
Совпадают все поля, кроме last_modified, поскольку такое поле есть только в table2 и служит оно только для отражения изменения записи (необходимо для timestamp-синхронизации Mobilink)
...
Рейтинг: 0 / 0
Q? ASA9 Как сравнить записи?
    #33700370
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;
Все.
...
Рейтинг: 0 / 0
Q? ASA9 Как сравнить записи?
    #33724181
Фотография Анатолий Иванов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Q? ASA9 Как сравнить записи?
    #33724524
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
...
Рейтинг: 0 / 0
Q? ASA9 Как сравнить записи?
    #33726846
Фотография Анатолий Иванов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
16 сообщений из 16, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Q? ASA9 Как сравнить записи?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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