![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация таблиц [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