delphi4arab منتديات دلفي للعرب

نسخة كاملة : حل لمشكل sql هذا؟
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
عندي مشكلة مع جملة SQL هذه :
كود :
ADOQuery1.SQL.Text := 'SELECT users.ID_J as['+words[21]+'], '+ 'users.name as ['+words[9]+'], '+ 'users.lastName as ['+words[10]+'], '+ 'users.CIN as ['+words[11]+'], '+ 'users.tel as ['+words[12]+'], '+ 'users.job as ['+words[13]+'], '+ 'users.adr as ['+words[14]+'], '+ 'users.email as ['+words[15]+'], '+ 'users.JoinDate as ['+words[16]+'], '+ 'users.commit as ['+words[17]+'], '+ 'users.LastPayDate as ['+Words[18]+'], '+ 'Format(sum(pays.amount),"00.00") as ['+Words[20]+'] '+ 'FROM users '+ 'inner join pays on pays.id_j= users.id_j '+ 'group by users.ID_J, '+ 'users.name, '+ 'users.lastName, '+ 'users.CIN,'+ 'users.tel, '+ 'users.job, '+ 'users.adr, '+ 'users.email, '+ 'users.joinDate, '+ 'users.commit, '+ 'users.LastPayDate;';

فاذا لم يكن هناك record في الجدول pays, لن يضهر Record الـusers
ارغب ان يظهر في Total صفر 0 اذا لم يكن هناك record في الجدول pays
كيف ذلك؟؟
اضن علي التحقيق في جدول pays, اذا لم يجد users.ID_J يضيف Record جديد بـAmount = 0
؟؟
هذه محاولتي:
كود :
if check then begin MDBGrib.DataSource := nil; IDList := TStringList.Create; ADOQuery1.SQL.Text := 'Select ID_J from users'; ADOQuery1.Active := true; while not DataSource1.DataSet.EOF do begin IDList.Add(DataSource1.DataSet.FieldByName('ID_J').AsString); DataSource1.dataset.next; end; for i := 0 to IDList.count-1 do begin ADOQuery1.SQL.Text := 'Select ID_J from pays where ID_J = '+IDList.Strings[i]; ADOQuery1.Active := true; if length(ADOQuery1.Fields[0].AsString)=0 then begin ADOQuery1.SQL.Text := 'Insert INTO pays values('+IDList.Strings[i]+',1999,02,02,0)'; ADOQuery1.ExecSQL; end; end; MDBGrib.DataSource := DataSource1; end;
لكنها بطيئة جدا
وعليكم السلام

يمكنك استخدام

FULL JOIN
بدلاً من
inner join
يضهر لي: Error : Unspecified error
شكرا على التقريب للاجابة لكن الحل هو Left outer join
...
وجدت الحل كامل اخيرا :
كود :
ADOQuery1.SQL.Text := 'SELECT users.ID_J as['+words[21]+'], '+ 'users.name as ['+words[9]+'], '+ 'users.lastName as ['+words[10]+'], '+ 'users.CIN as ['+words[11]+'], '+ 'users.tel as ['+words[12]+'], '+ 'users.job as ['+words[13]+'], '+ 'users.adr as ['+words[14]+'], '+ 'users.email as ['+words[15]+'], '+ 'users.JoinDate as ['+words[16]+'], '+ 'users.commit as ['+words[17]+'], '+ 'users.LastPayDate as ['+Words[18]+'], '+ 'IIF(IsNull(pays.Amount), "00,00" , Format(pays.Amount,"00.00")) as ['+Words[20]+'] '+ 'FROM users '+ 'left outer join pays on pays.id_j= users.id_j '+ 'group by users.ID_J, '+ 'users.name, '+ 'users.lastName, '+ 'users.CIN,'+ 'users.tel, '+ 'users.job, '+ 'users.adr, '+ 'users.email, '+ 'users.joinDate, '+ 'users.commit, '+ 'users.LastPayDate, '+ 'pays.amount;';
اسف لتعدد مشاركاتي ... فقط اردت ان تعم الفائدة..