Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.09;
Скачать: CL | DM;

Вниз

Синхронизация таблиц   Найти похожие ветки 

 
бобёр   (2002-11-21 12:49) [0]

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


 
stone ©   (2002-11-21 12:55) [1]

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


 
Prooksius ©   (2002-11-21 12:57) [2]

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


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

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 (?)




 
BorisUK ©   (2002-11-21 13:40) [4]

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

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


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

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 есть в обоих таблицах


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

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


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

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


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

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



 
Prooksius ©   (2002-11-21 14:44) [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:49) [10]

Опять же не обязательно!
допустим 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:52) [11]

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


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

Спасибо.

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

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

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



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

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


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

Ок.

В таблице 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:56) [15]

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


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

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


 
GLUKAS ©   (2002-11-21 16:11) [17]

Никак можно им присвоить значения допустим пробел...
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)





Страницы: 1 вся ветка

Текущий архив: 2002.12.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
14-28233
Шишкин Илья
2002-11-16 07:50
2002.12.09
Кто-нибудь знает как пользоваться ettercap?


3-27806
Shrek
2002-11-22 12:59
2002.12.09
SQL SELECT


4-28343
NIVA
2002-10-25 08:20
2002.12.09
Язык по умолчанию


1-28050
Abelevich
2002-11-27 19:39
2002.12.09
Использование Word в качестве редактора


1-27989
Peroon
2002-11-27 01:55
2002.12.09
delete(var S:String; Index: Integer; Count: Integer);