SQLite-Comment joindre des tables de différentes bases de données?

j'ai une application qui utilise une base de données SQLite et tout fonctionne comme il se doit. Je suis maintenant dans le processus d'ajouter de nouvelles fonctionnalités qui exigent une deuxième base de données SQLite, mais j'ai du mal à comprendre comment joindre des tables à partir des différentes bases de données.

Si quelqu'un peut m'aider avec celui-ci, j'avais vraiment l'apprécier!

Edit: Voir cette question pour un exemple de cas vous pouvez vous adapter à votre langue lorsque vous attachez des bases de données comme indiqué dans la réponse acceptée.

84
demandé sur Community 2011-07-26 06:52:11

3 réponses

si attacher est activé dans votre construction de Sqlite (il devrait être dans plus construit), vous pouvez attacher un autre fichier de base de données à la connexion actuelle en utilisant le attacher mot-clé. La limite de sur le nombre de db qui peuvent être attachés à est un paramètre de temps de compilation ( SQLITE_MAX_ATTACHED ), actuellement par défaut à 10, mais cela aussi peut varier par le construire vous avez. La limite globale est de 125.

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

vous pouvez voir toutes les bases de données connectées avec le mot-clé

.databases

alors vous devriez être en mesure de faire ce qui suit.

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

noter que "[l]es noms de base de données main et temp sont réservés pour la base de données principale et la base de données pour contenir des tables temporaires et d'autres objets de données temporaires. Ces deux noms de bases de données existent pour chaque base de données connexion et ne doit pas être utilisé pour la fixation".

102
répondu Brian Gideon 2018-03-25 22:04:01

Eh bien, je n'ai pas beaucoup d'expérience avec SQLite vous devez accéder aux deux bases de données dans une seule requête.

vous pouvez avoir quelque chose comme:

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

dans les bases de données comme SQLServer vous pouvez accéder à d'autres bases de données de cette manière hiérarchique, cela devrait aussi fonctionner pour SQLite.

je pense que vous pouvez initier une instance de sqlite avec plus d'une base de données !

2
répondu Yugal Jindle 2011-07-26 03:01:22

voici un exemple de C# pour répondre à cette Question

/// <summary>
/// attachSQL = attach 'C:\WOI\Daily SQL\Attak.sqlite' as db1 */
/// path = "Path of the sqlite database file
/// sqlQuery  = @"Select A.SNo,A.MsgDate,A.ErrName,B.SNo as BSNo,B.Err as ErrAtB from Table1 as A 
///                    inner join db1.Labamba as B on 
///                    A.ErrName = B.Err";
/// </summary>
/// <param name="attachSQL"></param>
/// <param name="sqlQuery"></param>
public static DataTable GetDataTableFrom2DBFiles(string attachSQL, string sqlQuery)
{
    try
    {
        string conArtistName = "data source=" + path + ";";
        using (SQLiteConnection singleConnectionFor2DBFiles = new SQLiteConnection(conArtistName))
        {
            singleConnectionFor2DBFiles.Open();
            using (SQLiteCommand AttachCommand = new SQLiteCommand(attachSQL, singleConnectionFor2DBFiles))
            {
                AttachCommand.ExecuteNonQuery();
                using (SQLiteCommand SelectQueryCommand = new SQLiteCommand(sqlQuery, singleConnectionFor2DBFiles))
                {
                    using (DataTable dt = new DataTable())
                    {
                        using (SQLiteDataAdapter adapter = new SQLiteDataAdapter(SelectQueryCommand))
                        {
                            adapter.AcceptChangesDuringFill = true;
                            adapter.Fill(dt);
                            return dt;
                        }
                    }
                }
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show("Use Process Exception method An error occurred");
        return null;
    }

}
2
répondu Dr.Sai 2018-04-01 16:57:57