SQLiteデータベースを使用するアプリケーションがあり、すべてが正常に機能します。現在、2番目のSQLiteデータベースを必要とする新しい機能を追加しているところですが、さまざまなデータベースのテーブルを結合する方法を理解するのに苦労しています。
誰かがこれを手伝ってくれるなら、私は本当に感謝しています!
編集:承認された回答で述べられているように、データベースを接続するときに自分の言語に適応できるケースの例については、この質問を参照してください。
SQLiteデータベースを使用するアプリケーションがあり、すべてが正常に機能します。現在、2番目のSQLiteデータベースを必要とする新しい機能を追加しているところですが、さまざまなデータベースのテーブルを結合する方法を理解するのに苦労しています。
誰かがこれを手伝ってくれるなら、私は本当に感謝しています!
編集:承認された回答で述べられているように、データベースを接続するときに自分の言語に適応できるケースの例については、この質問を参照してください。
回答:
SqliteのビルドでATTACHがアクティブになっている場合(ほとんどのビルドで有効)、ATTACHキーワードを使用して現在の接続に別のデータベースファイルをアタッチできます。アタッチできるdbの数の制限は、コンパイル時の設定(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;
なお、「[t]は、彼のデータベース名main
とtemp
プライマリ・データベースと一時テーブルやその他の一時的なデータオブジェクトを保持するデータベースのために予約されている。これらのデータベース名の両方が、すべてのデータベース接続のために存在し、取り付けのために使用すべきではありません」。
'
、ファイル名を(一重引用符で)囲むまで機能しなかったと述べました。私は同じことを見つけました。
この質問を完了するための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のインスタンスを開始できると思います!