簡體   English   中英

SQLite-如何連接來自不同數據庫的表?

[英]SQLite - How do you join tables from different databases?

我有一個使用SQLite數據庫的應用程序,一切正常運行。 我現在正在添加需要第二個SQLite數據庫的新功能,但是我很難弄清楚如何從不同的數據庫聯接表。

如果有人可以幫助我解決這個問題,我將不勝感激!

編輯:請參見此問題 ,以作為在接受答案時提到的附加數據庫時可以適應您的語言的示例案例。

如果在您的Sqlite版本中激活ATTACH (應該在大多數版本中都已激活 ),則可以使用ATTACH關鍵字將另一個數據庫文件附加到當前連接。 可以附加的數據庫數量限制是編譯時間設置( SQLITE_MAX_ATTACHED ),當前默認為10,但這也可能因您所使用的版本而異。 全局限制為125。

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;

請注意,“數據庫名稱maintemp為主數據庫和數據庫保留,用於保存臨時表和其他臨時數據對象。這兩個數據庫名稱對於每個數據庫連接都存在,並且不應用於附件”。

這是完成此問題的C#示例

/// <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;
    }

}

好吧,我在SQLite方面沒有太多經驗,您必須在單個查詢中訪問兩個數據庫。

你可以有類似的東西:

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

在類似SQLServer的數據庫中,您可以按這種分層方式訪問其他數據庫,這也適用於SQLite。

我認為您可以啟動具有多個數據庫的sqlite實例!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM