Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Синхронизация таблиц [D6, IB6.x]


бобёр ©   (2002-11-21 12:49:00) 

Есть 2 таблицы в одной базе: table1, table2
Таблицы имеют одинаковые поля: name,tel
Как можно синхронизировать таблицы, т.е. добавить в table2 из table1 те записи которых нет в table2?


GLUKAS   (2002-11-21 16:11:00) [1]

Никак можно им присвоить значения допустим пробел...
insert into klient_pgp (firm_name,firm_address,Account)
select firm_name,firm_address," " from mail_pgp
where firm_address not in (select firm_address from klient_pgp)



бобёр   (2002-11-21 16:04:00) [2]

Да.
Char(20) not null;
Т.е. это означает что оно должно быть полюбому заполнено?
Если так то как в этом же запросе присвоить всем таким полям нулевые значения?


GLUKAS   (2002-11-21 15:56:00) [3]

Не понял ...
как ругается?
видимо поле определено как не нулевое.....?


бобёр   (2002-11-21 15:39:00) [4]

Ок.

В таблице klient_pgp есть поле account, которого нет в таблице mail_pgp. Это поле должно остаться пустым(таким как есть).
При следующем запросе ругается на value"***null***" для поля Account
Что можно прописать в запросе?

insert into klient_pgp (firm_name,firm_address) select firm_name,firm_address from mail_pgp where firm_address not in (select firm_address from klient_pgp)




GLUKAS   (2002-11-21 15:12:00) [5]

insert into mail_pgp(все кроме person_id
) select(все кроме в томже порядке person_id
) from klient_pgp


бобёр   (2002-11-21 15:05:00) [6]

Спасибо.

Теперь другая ошибка.Validation error for column person_id

В таблице mail_pgp это триггер(+1 для каждой новой записи)
Таблица klient_pgp пока пустая и это значение пустое

Я так понимаю нужно вставлять также здесь значение.
Но эти значения в обоих таблицах будут различаться
Как это можно сделать?


Prooksius   (2002-11-21 14:52:00) [7]

Ясно, значит просто не надо было писать Values ()
Век живи - век учись!


GLUKAS   (2002-11-21 14:49:00) [8]

Опять же не обязательно!
допустим tabl1:
num integer
name varchar(100)
pol varchar(1)

tabl2:
num integer
name varchar(100)
age integer

тогда вот это будет работать!
insert into tabl1(num,mane) select num,name from tabl2


Prooksius   (2002-11-21 14:44:00) [9]

2 Наталия © (21.11.02 14:16)
Все-таки поддерживает. Поспешил я. Пример из доки (которую я начал-таки читать :-)

The next isql statement specifies values to insert into a table with a SELECT statement:

INSERT INTO PROJECTS
SELECT * FROM NEW_PROJECTS
WHERE NEW_PROJECTS.START_DATE > "6-JUN-1994";


То есть надо, чтобы таблицы были одинаковые по структуре.


GLUKAS   (2002-11-21 14:39:00) [10]

IB в полне поддерживает такие запросы!!!!!!!
сам постоянно пользуюсь!
если таблицы совершенно одинаковые то -
insert into table1 select * from table2;
Однозначно!


Prooksius   (2002-11-21 14:28:00) [11]

2 Наталия © (21.11.02 14:16)
Да действительно... Давно доки не читал :)
Придется через ХП.
Пробегаешься по всем строкам table1, проверяешь, не находится ли строка уже в 2 таблице и, если нет - вставляешь


Наталия   (2002-11-21 14:16:00) [12]

IB не поддерживает такие запросы, по-моему. Сделай через ХП.


бобёр   (2002-11-21 13:55:00) [13]

insert into klient_pgp (firm_name,firm_address) values (select firm_name,firm_address from mail_pgp where firm_address not in (select firm_address from klient_pgp))

Вроде все правильно

Поля firm_name,firm_address есть в обоих таблицах


BorisUK   (2002-11-21 13:40:00) [14]

ты надеюсь fields заменил на реальные названия полей в таблице и их количество совпадает с кол-вом полей, возвращяемым подзапросом :)?

если да то пиши реальные SQL для анализа.


бобёр   (2002-11-21 13:31:00) [15]

select fields from table1 where name not in (select name from table2)
Этоработает

А здесь ругается на первый select после values

insert into table2 (fields) values (select fields from table1 where name not in (select name from table2))

Как вставить в следующий запрос результат предыдущего подзапроса?
insert into table2 (fields) values (?)



Prooksius   (2002-11-21 12:57:00) [16]

insert into table2 (fields) values (select fields from table1 where name not in (select name from table2))


stone   (2002-11-21 12:55:00) [17]

в запросе использовать exists


Наверх

Титульная страница Поиск, карта сайта Написать письмо