View Full Version : مقايسه دو تا جدول و نشان دادن اختلافات
سعید صابری
جمعه 11 اردیبهشت 1388, 10:09 صبح
سلام من 2 تا table دارم(بانك sql) مي خوام با هم مقايسه كنم و فيلدهاي كه از table دوم با اول مغايرت دارند را نشان بدهد
ممنونم از راهنماييتون
bmanfy
جمعه 11 اردیبهشت 1388, 18:02 عصر
اگر بخواهی بر اساس یک فیلد این مقایسه رو انجام بدی می تونی از روش زیر انجام بدی .با فرض بر اینکه id اون فیلدی هست که قرار مقایسه بر اساس اون صورت بگیره .
Select * From FirstTbl
Where id Not in (Select Id From SecondTbl)
البته اگر بخواهی برای چندین فیلد مقایسه انجام بدی هم میتونی همین رو بسط بدی . و البته فکر میکنم از پیوندها هم میتونی برای این کار استفاده کنی .
موفق باشی .
سعید صابری
چهارشنبه 16 اردیبهشت 1388, 21:06 عصر
Select * From FirstTbl
Where id Not in (Select Id From SecondTbl)
البته اگر بخواهی برای چندین فیلد مقایسه انجام بدی هم میتونی همین رو بسط بدی . و البته فکر میکنم از پیوندها هم میتونی برای این کار استفاده کنی .
موفق باشی .
سلام ممنون از جوابتون
حالا اگر ما adoconection 2 تا باشه بخواهيم يكي تيبل از اين و تيبل ديگه از اون مقايسه كنيم چي؟
merced
چهارشنبه 16 اردیبهشت 1388, 22:51 عصر
انتخاب از يه ديتابيس ديگه
select * from DBName.dbo.TableName
البته اگه ديتابيسها روي يك سرود هستند
سعید صابری
پنج شنبه 17 اردیبهشت 1388, 10:20 صبح
[/code]البته اگه ديتابيسها روي يك سرود هستند
ممنون از راهنماييتون
اگر اكسس كه فايل است يا فايل sql باشه نميشه؟
shervin farzin
پنج شنبه 17 اردیبهشت 1388, 15:01 عصر
سلام
اگر بخواهي بر اساس يک فيلد اين مقايسه رو انجام بدي مي توني از روش زير انجام بدي
استفاده از Where ID not in براي جستجو در جداولي با حجم داده بالا ميتونه باعث كندي در اجراء
به حد زيادي بشه . پيشنهاد ميكنم به جاي اون كد از كد زير براي مقايسه 2 جدول استفاده كنيد
SELECT id
FROM Table_2 WITH (NOLOCK)
WHERE not exists ( SELECT id FROM Table_1 with (nolock) WHERE Table_1.id = Table_2.id )
نكته : دستور With Nolock فقط براي جداول MS SQL قابل اجراء است ، نه Access .
اين كد به جاي مقايسه داده ها با هم ، بر اساس Index مقايسه رو انجام ميده كه به مراتب سريعتر عمل ميكنه .
اگر اكسس كه فايل است يا فايل sql باشه نميشه؟
چرا كه نه . به اين مثال توجه كنيد :
فرض ميكنيم كه دو تا فايل Access به نام هاي Data1 و Data2 داريم در آدرس C:\Project_Folder
و جداول Table_1 و Table_2 به ترتيب در اين دو پايگاه Access هستند .
براي مقايسه اين دو جدول شما نيازي به 2 تا كامپوننت ADOConnection نداريد . كافيه با استفاده
از دستور IN بعد از From در Select ، آدرس فايل فيزيكيه Database رو مشخص كنيد .
من كد مقايسه اي رو كه بالا براتون نوشتم رو مجددا براي دو جدول Access با شرايط ذكر شده
در دلفي مينويسم :
with ADOQuery1 do
begin
sql.Clear;
sql.Add('SELECT id');
sql.Add('FROM Table_2 in '+QuotedStr('C:\Project_Folder\data2.accdb'));
sql.Add('WHERE not exists ');
sql.Add('(');
sql.Add('SELECT id FROM Table_1');
sql.Add('WHERE Table_1.id = Table_2.id ');
sql.Add(')');
Open;
end;
براي اجراء اين كد شما به Connection احتياج داريد كه به فايل Data1 متصل شده باشه .
موفق باشيد .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.