# Native Code > برنامه نویسی در Delphi > بانک های اطلاعاتی در Delphi >  مقايسه دو تا جدول و نشان دادن اختلافات

## سعید صابری

سلام من 2 تا table دارم(بانك sql) مي خوام با هم مقايسه كنم و فيلدهاي كه از table دوم با اول مغايرت دارند را نشان بدهد

ممنونم از راهنماييتون

----------


## bmanfy

اگر بخواهی بر اساس یک فیلد این مقایسه رو انجام بدی می تونی از روش زیر انجام بدی .با فرض بر اینکه id اون فیلدی هست که قرار مقایسه بر اساس اون صورت بگیره .

Select * From FirstTbl
Where id Not in (Select Id From SecondTbl)

البته اگر بخواهی برای چندین فیلد مقایسه انجام بدی هم میتونی همین رو بسط بدی . و البته فکر میکنم از پیوندها هم میتونی برای این کار استفاده کنی .
موفق باشی .

----------


## سعید صابری

> Select * From FirstTbl
> Where id Not in (Select Id From SecondTbl)
> البته اگر بخواهی برای چندین فیلد مقایسه انجام بدی هم میتونی همین رو بسط بدی . و البته فکر میکنم از پیوندها هم میتونی برای این کار استفاده کنی .
> موفق باشی .



سلام ممنون از جوابتون
حالا اگر ما adoconection 2 تا باشه بخواهيم يكي تيبل از اين و تيبل ديگه از اون مقايسه كنيم چي؟

----------


## merced

انتخاب از يه ديتابيس ديگه 

select * from DBName.dbo.TableName


البته اگه ديتابيس‌ها روي يك سرود هستند

----------


## سعید صابری

> [/code]البته اگه ديتابيس‌ها روي يك سرود هستند



ممنون از راهنماييتون

اگر اكسس كه فايل است يا فايل sql باشه نميشه؟

----------


## shervin farzin

سلام



> اگر بخواهي بر اساس يک فيلد اين مقايسه رو انجام بدي مي توني از روش زير انجام بدي


استفاده از 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* متصل شده باشه .
موفق باشيد .

----------

