Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
бобёр   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
1-28013
AlexandrRya
2002-11-29 23:38
2002.12.09
netapi32.dll


3-27867
kostik78ua
2002-11-21 10:29
2002.12.09
Сортировка


14-28280
Igorek
2002-11-19 12:55
2002.12.09
Как сделать кнопку Пуск/Start поменьше?


14-28229
Cr@sh
2002-11-17 18:08
2002.12.09
Подскажите самый дешевый платный хостинг


1-27983
Ag2002
2002-11-29 16:04
2002.12.09
списки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский