এসকিউএলাইট - আপনি কীভাবে বিভিন্ন ডাটাবেস থেকে সারণিতে যোগদান করবেন?


101

আমার কাছে একটি অ্যাপ্লিকেশন রয়েছে যা একটি এসকিউএলাইট ডাটাবেস ব্যবহার করে এবং সবকিছু যা করা উচিত ঠিক তেমনভাবে কাজ করে। আমি এখন নতুন কার্যকারিতা যুক্ত করার প্রক্রিয়াতে চলেছি যার জন্য দ্বিতীয় এসকিউএল ডাটাবেস প্রয়োজন, তবে বিভিন্ন ডাটাবেস থেকে টেবিলগুলিতে কীভাবে যোগদান করতে হবে তা নির্ধারণ করতে আমার খুব কষ্ট হচ্ছে।

যদি কেউ আমাকে এটির সাথে সাহায্য করতে পারে তবে আমি সত্যিই এটির প্রশংসা করব!

সম্পাদনা করুন: এই প্রশ্নটি উদাহরণের ক্ষেত্রে দেখুন যখন আপনি গ্রহণযোগ্য উত্তরে উল্লিখিত ডাটাবেসগুলি সংযুক্ত করেন তখন আপনি আপনার ভাষার সাথে মানিয়ে নিতে পারেন।


ডাটাবেস কেমন? এগুলিতে যোগদানের জন্য কি কোনও সাধারণ কলাম রয়েছে? প্রত্যেকের জন্য কলামগুলি কি একই রকম যে আপনি ইউনিয়ন ব্যবহার করতে পারবেন? sqlite.org/syntaxdiagrams.html
অ্যালেক্স আর

হ্যাঁ এমন কলাম রয়েছে যেগুলি ব্যবহার করে কীওয়ার্ড ব্যবহার করে একই নামকরণ করা যায় join আমার সমস্যাটি এমন নয় যে আমি কীভাবে যোগদান করতে জানি না যেহেতু আমার প্রোগ্রামটি ইতিমধ্যে একই ডাটাবেসে টেবিলগুলিতে ঘন ঘন এটি করে থাকে, এটি উভয় ডাটাবেসের সাথে কীভাবে লিঙ্ক করতে হয় তা আমি খুঁজে পেতে পারি না যাতে অন্যের থেকে অন্যের ব্যবহারযোগ্য হয় ( একটি যোগদানের মতো, উদাহরণস্বরূপ)
অ্যাডাম স্মিথ

উদাহরণ: প্রথম ডাটাবেসে "শিডিয়ুল" নামে একটি সারণী রয়েছে এটিতে অন্যান্য কলাম, একটি তারিখ কলাম, একটি দল আইডি এবং একটি লেন নম্বর রয়েছে। দ্বিতীয় ডাটাবেসে একটি টেবিল রয়েছে যা তাদের দল গেমের জন্য ব্যবহারকারীদের দ্বারা প্রবেশ করা স্কোরের ট্র্যাক রাখে। সুতরাং এই টেবিলটির একটি তারিখ এবং একটি টিআইডিও রয়েছে। প্রতিটি দল কোন লেনে খেলতে চলেছে তা জানতে এই দুটি কলাম ব্যবহার করে আমি তাদের সাথে যোগ দিতে চাই। অন্যান্য টেবিল রয়েছে যা অন্যান্য উদ্দেশ্যে যোগ দিতে হবে, তবে আপনি এই উদাহরণ থেকে আমার কী প্রয়োজন তা সম্পর্কে ধারণা পেতে পারেন।
অ্যাডাম স্মিথ

উত্তর:


130

যদি সংযুক্ত করুন হয় সক্রিয় SQLite আপনার Build এ (এটা হওয়া উচিত সবচেয়ে বিল্ড), আপনি বর্তমান সংযোগ ব্যবহার করতে অন্য ডাটাবেস ফাইলের সংযুক্ত করতে পারেন সংযুক্ত করুন শব্দ। গোয়েন্দা পুলিশের যে সংযুক্ত করা যাবে সংখ্যার উপর সীমা একটি কম্পাইল সময় সেটিং (হয় 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প্রাথমিক ডাটাবেস ও ডাটাবেসের অস্থায়ী টেবিল ও অন্যান্য অস্থায়ী ডেটা বস্তু রাখা জন্য সংরক্ষিত। এই ডাটাবেসের নাম দুজনেই যে ডাটাবেসের সংযোগের জন্য বিদ্যমান এবং সংযুক্তি জন্য ব্যবহার করা উচিত নয়"।


4
ব্যবহারকারী স্ট্যানলিডি উল্লেখ করেছেন যে তিনি 'ফাইলের নামটি (একক উদ্ধৃতি) না লাগানো পর্যন্ত এটি তার পক্ষে কার্যকর হয়নি । আমি একই খুঁজে পেয়েছি।
বেকারিবস

4

এই প্রশ্নটি সম্পূর্ণ করার জন্য এখানে একটি সি # উদাহরণ দেওয়া আছে

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

}

1

ওয়েল, এসকিউএলাইটের সাথে আমার খুব বেশি অভিজ্ঞতা নেই আপনার একক ক্যোয়ারিতে উভয় ডাটাবেস অ্যাক্সেস করতে হবে।

আপনার মতো কিছু থাকতে পারে:

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

এসকিউএল সার্ভারের মতো ডাটাবেসে আপনি এই শ্রেণিবদ্ধ ফ্যাশনে অন্যান্য ডাটাবেসগুলি অ্যাক্সেস করতে পারেন, এটি এসকিউএলাইটের জন্যও কাজ করা উচিত।

আমি মনে করি আপনি 1 টিরও বেশি ডেটাবেস দিয়ে স্ক্লাইটের উদাহরণ শুরু করতে পারেন!


হ্যাঁ আমি এসকিউএল সার্ভারের জন্য ডকুমেন্টেশন দেখেছি, তবে এসকিউএলাইটের সমতুল্য ক্যোয়ারীটি খুঁজে পাইনি। এই ক্যোয়ারিতে সমস্যাটি হ'ল আমি আমার সংযোগ তৈরি করতে একজন ড্রাইভারম্যানের ব্যবহার করি, সুতরাং আমার কাছে দুটি সংযোগের অবজেক্ট রয়েছে যা ডাটাবেস ফাইলগুলিকে নির্দেশ করে তবে সংযোগ 1.table করা কোনও কারণে কাজ করছে বলে মনে হয় না।
অ্যাডাম স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.