Sqlite объединяет базы данных в одну, с уникальными значениями, сохраняя связь между ключом foregin [duplicate]
Этот вопрос является точной копией:
Объединение двух баз данных SQLite, каждая из которых имеет соединительные таблицы 1 ответПредлагается два решения (см. Ссылки внизу), но оба терпят неудачу в том, что яЯ пытаюсь сделать:
1. Заданная (идентичная) структура таблиц в базах данных, например, такая:DB1Фрукты--------------
| id | name |
--------------
| 1 | Apple |
| 2 | Lemon |
| 3 | Kiwi |
| 4 | Banana|
--------------
Сок----------------
| id | name |
----------------
| 1 | Juice A |
| 2 | Juice B |
----------------
Рецепт (Соединительная таблица)----------------------------
| id | juice_id | fruit_id |
----------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 3 |
----------------------------
DB2Фрукты---------------
| id | name |
---------------
| 1 | Kiwi |
| 2 | Lemon |
| 3 | Apple |
| 4 | Orange |
| 5 | Lime |
---------------
Сок----------------
| id | name |
----------------
| 1 | Juice C |
| 2 | Juice D |
----------------
Рецепт (Соединительная таблица)----------------------------
| id | juice_id | fruit_id |
----------------------------
| 1 | 1 | 1 |
| 2 | 1 | 3 |
| 3 | 2 | 2 |
| 4 | 2 | 4 |
----------------------------
2. преобразовать их в это:DB3Фрукты|----------------|
| id | name |
|----------------|
| 1 | Kiwi |
| 2 | Lemon |
| 3 | Apple |
| 4 | Orange |
| 5 | Lime |
| 6 | Banana |
------------------
Сок|--------------|
| id | name |
|--------------|
| 1 | Juice A |
| 2 | Juice B |
| 3 | Juice C |
| 4 | Juice D |
----------------
Рецепт (Соединительная таблица)----------------------------
| id | juice_id | fruit_id |
----------------------------
| 1 | 1 | 3 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 2 | 1 |
++++++++++++++++++++++++++++
| 5 | 3 | 1 |
| 6 | 3 | 3 |
| 7 | 4 | 2 |
| 8 | 4 | 4 |
----------------------------
Пожалуйста, обратите внимание, что фрукты IDs соответственно изменились, сохраняя отношения, несмотря на изменение идентификатора фруктов. ID - это первичный целочисленный автоинкрементный ключ, а Recipe содержит два внешних ключа (плюс собственный первичный целочисленный автоинкрементный ключ).
3. только два предложенных решения:а)
$sqlite3 database1.db '.dump' >> tmp
$sqlite3 database2.db '.dump' >> tmp
$sqlite3 database3.db '.import tmp'
$ #sometimes sqlite3 database3.db < 'tmp' instead of last row
б)
$ sqlite3 newdb
attach 'b.db' as toMerge;
BEGIN;
insert into newdb select * from toMerge.sometable;
COMMIT;
Другие ответы т.е. 1, 2, 3, 4, 5, 6, 7 просто повторите тот же шаблон. Возможно 6 может быть решением, но я не могу сказать, длина этого запроса напугала меня ...
Более того, как 1 утверждает, что нет графического интерфейса сравнения слить решение. По крайней мере, помимо 2011 sqlitecompare, который, вероятно, в любом случае работает в Windows (яищу инструмент Linux) Некоторые мнения в 8 также подтвердите, что едва ли у какого-либо удобного графического интерфейса есть опция слияния.
Итак, вопрос в том.Как объединить sqlite DB в Linux, сохранив отношения, но не сохранив дублирующиеся значения из тегов / заметок? Я'Я думал, что сохранение организованной структуры - главная причина для хранения вещей в базе данных, но, похоже, я не понимаю, почему я должен хранить два одинаковых фрукта в одной корзине, если объединить из двух корзин. Моя корзина должна содержать уникальные фрукты и рецепты, я хочу съесть этот киви :)