SQLite - Как вы объединяете таблицы из разных баз данных?

72

У меня есть приложение, которое использует базу данных SQLite, и все работает так, как должно. Я сейчас добавляю новые функции, для которых требуется вторая база данных SQLite, но мне сложно определить, как присоединиться к таблицам из разных баз данных.

Если кто-то может помочь мне с этим, я бы очень признателен!

Изменить: См. этот вопрос для примера, который вы можете адаптировать к своему языку при прикреплении баз данных, как указано в принятом ответе.

  • 0
    На что похожа база данных? Есть ли какие-либо общие столбцы, которые можно использовать, чтобы присоединиться к ним? Являются ли столбцы для каждого одинаковыми, чтобы можно было использовать объединение? sqlite.org/syntaxdiagrams.html
  • 0
    Да, есть столбцы, которые можно объединить с помощью ключевого слова USING, так как они названы одинаково. Моя проблема не в том, что я не знаю, как присоединиться, поскольку моя программа уже часто делает это с таблицами в одной и той же базе данных, а в том, что я не могу найти способ связать обе базы данных, чтобы данные можно было использовать из другой ( как соединение, например)
Показать ещё 4 комментария
Теги:
database
join

3 ответа

93
Лучший ответ

К текущему соединению можно присоединить другой файл базы данных с помощью ключевого слова ATTACH.

attach 'database1.db' as db1;
attach 'database2.db' as db2;

Вы можете видеть все подключенные базы данных с ключевым словом

.databases

Затем вы сможете сделать следующее.

select
  *
from
  db1.SomeTable a
    inner join 
  db2.SomeTable b on b.SomeColumn = a.SomeColumn;

Обратите внимание, что "[t] его имена базы данных main и temp зарезервированы для первичной базы данных и базы данных для хранения временных таблиц и других временных объектов данных. Оба этих имени базы данных существуют для каждого подключения к базе данных и не должны для прикрепления".

  • 1
    Пользователь StanleyD отметил, что у него это не сработало, пока он не поставил ' (одинарные кавычки) вокруг имени файла. Я нашел то же самое.
  • 0
    Если я использую несколько потоков для чтения / записи в мои подключенные базы данных, должен ли я создавать разные экземпляры SQLiteOpenHelper для каждой базы данных или они должны использовать один и тот же помощник?
21

Для меня

attach database database1.db as db1;

не работает Я должен изменить его на

attach 'database1.db' as db1;

тогда вы можете увидеть все подключенные базы данных с ключевым словом

.databases
2

Ну, у меня нет большого опыта работы с SQLite, вам нужно иметь доступ к обеим базам данных в одном запросе.

У вас может быть что-то вроде:

select name from DB1.table1 as a join DB2.table2 as b where a.age = b.age;

В таких базах данных, как SQLServer, вы можете обращаться к другим базам данных в этом иерархическом порядке, это также должно работать для SQLite.

Я думаю, вы можете инициировать экземпляр sqlite с более чем 1 базой данных!

  • 0
    Да, я видел документацию для сервера SQL, но не смог найти эквивалентный запрос для SQLite. Проблема с этим запросом заключается в том, что я использую драйвер-менеджер для создания своего соединения, поэтому у меня есть два объекта соединения, которые указывают на файлы базы данных, но выполнение conn1.table, похоже, не работает по какой-то причине.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню