powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Создание новой таблицы базы на основе периодического выбора из таблицы другой базы.
3 сообщений из 3, страница 1 из 1
Создание новой таблицы базы на основе периодического выбора из таблицы другой базы.
    #38774070
djonnyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день прошу ткунть носом помочь в решении задачи. Суть такова: постоянно работающий процесс периодически скидывает в папку БД (sqlite) на некоторое время. Требуется выбрать новые данные из этой базы и перенести в БД - накопитель, с учетом проверки наличия записей в этой БД.
То есть, например, файл temp.db с таблицей numbers
Код: plsql
1.
2.
3.
4.
CREATE TABLE numbers (id INTEGER PRIMARY KEY AUTOINCREMENT, number TEXT);
INSERT INTO numbers(number) VALUES('89001001010');
INSERT INTO numbers(number) VALUES('89002002020');
INSERT INTO numbers(number) VALUES('89003003030');


Получаем такое:
id | number
1 89001001010
2 89002002020
3 89003003030
Также у нас есть база-накопитель full.db c одной таблицей numbersn (в которой, например, есть одна строка с таким же значением как и во временной базе, а также другие отличные строки)
Код: plsql
1.
2.
3.
CREATE TABLE numbersn (id INTEGER PRIMARY KEY AUTOINCREMENT, number TEXT);
INSERT INTO numbersn(number) VALUES('89001001010');
INSERT INTO numbersn(number) VALUES('89004004040');


id | number
1 89001001010
2 89004004040
Это очень приблизительно, потому как в оригинале около номеров еще будут вторичные параметры, по которым тоже нужно будет искать и добавлять но уже к существующему номеру новые данные. Поэтому хочется разобраться хотябы на этой, казалось бы простой задаче.
В качестве решения, которое мне пришло на ум предлагается вначале подключить две базы данных (накопительную вторичной, а временную основной ), а затем провести сравнение и вставку. Но у меня не хватает ума теоретических знаний.... Если б это был С# с текстовым файлом со строками я бы сделал за 5 минут. А тут - не могу (ни найти ни придумать как). Набросок примерного решения
Код: plsql
1.
2.
3.
4.
5.
ATTACH DATABASE 'temp.db' AS tempdb;
ATTACH DATABASE 'full.db' AS fulldb;
INSERT INTO numbersn(number) 
SELECT 'сюда как-то нужно добавить каждый по очереди' new
WHERE NOT EXISTS (SELECT 1 FROM numbers WHERE number = new);


Если это прописные истины - прошу не смеяться, а помочь в решении. Заранее спасибо. Учится никогда не поздно :)
...
Рейтинг: 0 / 0
Создание новой таблицы базы на основе периодического выбора из таблицы другой базы.
    #38774095
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
insert into target_table (f1)
select f2
from source_table
where f2 not in (select f1 from target_table)
...
Рейтинг: 0 / 0
Создание новой таблицы базы на основе периодического выбора из таблицы другой базы.
    #38774184
djonnyd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо огромное уважаемый! Все работает! А можно ли набраться наглости и попросить вас подумать над решением усложненного вида этой задачи: в исходной базе исходная таблица имеет столбцы номер и реквизиты номера (например имя). Решением будет после нескольких обработок получить две таблицы: в первой будут номера, и их уникальный номер (индекс), а во втором столбце будут реквизиты и рядом столбец с привязкой к уникальному номеру из первой (полученной) таблицы:
Исходник tempdb (source_table)
id | number | name
1 | 89001001010 | Вася
2 |89002002020 | Петя
3 | 89003003030 | Маша
Исходник через некоторое время tempdb (source_table)
id | number | name
1 | 89001001010 | Вася
2 | 89002002020 | Иванов
3 | 89004004040 | Вика
Хотелось бы получить две таблицы в fulldb после двух обработок tempdb (source_table) (спустя некоторое время)
target_table1
id | number | index
1 | 89001001010 | 1
2 |89002002020 | 2
3 | 89003003030 | 3
4 | 89004004040 | 4

target_table2
id | name | index
1 | Вася | 1
2 | Петя | 2
3 | Иванов | 2
4 | Маша | 3
5 | Вика | 4
Чтобы в итоге после запроса получить результат по поиску 89002002020 - Петя, Иванов
Вопрос заключается в том, что как сделать привязку (index) "один-ко-многим" я знаю. Но не понимаю как сделать разграничение поиска и вставки по нескольким параметрам с сравнениями. Если что не так сказал, не обессудьте. "Я не волшебник, я только учусь...."
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Создание новой таблицы базы на основе периодического выбора из таблицы другой базы.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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