[sql] SQLite-다른 데이터베이스의 테이블을 어떻게 조인합니까?

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;

참고 “[t] 그가 데이터베이스 이름 그 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에서도 작동합니다.

1 개 이상의 데이터베이스로 sqlite 인스턴스를 시작할 수 있다고 생각합니다!


답변