اذهب إلى المحتوى
  • 0

الاستعلام من حقل واحد اكثر من مره في حالة inner join اكثر من مره SQL

Flutter Dev

السؤال

تحيه طيبه للجميع

لدي استعلام كالتالي:

 SqlCommand comm = new SqlCommand("select * from TFile " +
                                "inner join TAlQ AS A ON TFile.SendFromIdTAlQ = A.IdAlQ " +
                                       "inner join TAlQ  AS B  ON TFile.SendToIdTAlQ = B.IdAlQ " + " WHERE " + "TFile.Name" + " LIKE N'%" + TextBoxSerach.Text + "%'", con);
               

 

الجدول TFile يحتوي على اعمده FromIdTAlQ + ToIdTAlQ وهم سوف يمتلكون قيم مختلف ولكن من عمود واحد من الجدول الثاني (ALQ) وبتحديد من حقل NameAlQ

 

الجدول الثاني هو جدول ALQ  ويحتوي على حقل IdTAlQ و NameAlQ

 

 بعد ان احصل على البيانات اقوم بعرضها للمستخدم كالتالي :

SqlDataReader srd = comm.ExecuteReader();


                if (srd.HasRows)
                {
                  
                    while (srd.Read())
                    {
                   
                        TexeBoxId.Text = srd["Id"].ToString();
                        TextName.Text = srd["Name"].ToString();
    //FromAlQ
  TextFrom.Text = srd["NameAlQ"].ToString();


//ToAlQ
 TextTo.Text = srd["NameAlQ"].ToString();//=======================هنا المشكله

}

}

 

المشكلة انني  ارغب بالاستعلام عن الحقل NameAlQ ولكن لا اعلم كيف أقوم بأخبار الدالة ان تأتي لي بقيمة الحقل مرتين بشكل مختلف الاول FromAlQ اما الثاني ToIdTAlQ حاولت كثير ولكن هيا دائما تأتي بقيمة FromIdTAlQ  ولا يمكنني الوصول الى السطر الثاني من الاستعلام كيف يمكنني توجيهها الى هذا السطر وهو المطلوب :

 "inner join TAlQ  AS B  ON TFile.ToIdTAlQ = B.IdAlQ " 

لا اعلم اذا كانت المشكلة واضحه صراحه لم اعلم كيف يمكنني شرحها بالمختصر اكثر 

ياليت لو احد لديه فكره عن طريقة حلها يساعدنا

تم التعديل في بواسطة مروان مروان3
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1
بتاريخ On 12/18/2021 at 11:15 قال مروان مروان3:

اهلا بك اخي الكريم

شاكر لك ردك اخوي استفسار بسيط لو تكرمت 

من اجل عمل استعلام موجه لسطر الأول او السطر ثاني من الاستعلام ماذا يجب ان استعمل حتى اجلب البيانات ؟

 

اقصد في هذا الموقع بين علامات التنصيص:


srd["SendToIdAlQ"].ToString();

 srd["SendFromIdAlQ"].ToString();

انا احتاج ان اجلب بياناتهم مع بعض في نفس الوقت كيف يمكن توجيه كل سطر منهم الى سطر الاستعلام المناسب له 

انا قمت بوضعهم بشكل هذا ولكن فقط احصل على النتائج من الشق الاول من الاستعلام بمعنى لا ينتقل الى الشق الثاني منه بعد UNION ALL 

هل توجد طريقة لتوجيه الاستعلام لكل سطر على حده ؟

يمكنك تمرير قيمة ثابتة لكل سطر في ناتج الاستعلام مثل type = x لتعرف سطر اول او ثاني 

 

SELECT *, 'R1' AS type FROM table
UNION
SELECT *, 'R2' AS type FROM table

و مرر R2 للاستعلام الثاني ثم يمكنك معرفة كل سطر من الناتج لمن يعود

حل آخر، لا بأس بعمل استعلامين، وخزن نتيجتهما في متغيري منفصلين و طبق الشرط الذي يحلو لك لكل ناتج.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

حاول تنفيذ الاستعلام عن طريق دمج ناتج استعلامين منفصلين باستخدام Union All

SqlCommand comm = 

new SqlCommand(  
  "select * from TFile "
+ " inner join TAlQ AS A ON TFile.SendFromIdTAlQ = A.IdAlQ "
+ " WHERE TFile.Name LIKE N'%" + TextBoxSerach.Text + "%'" 
+ " UNION ALL"
+ " select * from TFile " +
+ " inner join TAlQ  AS B  ON TFile.SendToIdTAlQ = B.IdAlQ " +
+ " WHERE TFile.Name LIKE N'%" + TextBoxSerach.Text + "%'"
, con);

في حال توقع نتائج مكررة احذف كلمة ALL.

ALL تسمح بالتكرار، وإن حذفتها سيصبح الاستعلام أبطأ لأنه سيتحقق من كل قيمة مضافة أنها غير مكررة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 10 ساعات قال Wael Aljamal:

حاول تنفيذ الاستعلام عن طريق دمج ناتج استعلامين منفصلين باستخدام Union All


SqlCommand comm = 

new SqlCommand(  
  "select * from TFile "
+ " inner join TAlQ AS A ON TFile.SendFromIdTAlQ = A.IdAlQ "
+ " WHERE TFile.Name LIKE N'%" + TextBoxSerach.Text + "%'" 
+ " UNION ALL"
+ " select * from TFile " +
+ " inner join TAlQ  AS B  ON TFile.SendToIdTAlQ = B.IdAlQ " +
+ " WHERE TFile.Name LIKE N'%" + TextBoxSerach.Text + "%'"
, con);

في حال توقع نتائج مكررة احذف كلمة ALL.

ALL تسمح بالتكرار، وإن حذفتها سيصبح الاستعلام أبطأ لأنه سيتحقق من كل قيمة مضافة أنها غير مكررة

اهلا بك اخي الكريم

شاكر لك ردك اخوي استفسار بسيط لو تكرمت 

من اجل عمل استعلام موجه لسطر الأول او السطر ثاني من الاستعلام ماذا يجب ان استعمل حتى اجلب البيانات ؟

 

اقصد في هذا الموقع بين علامات التنصيص:

srd["SendToIdAlQ"].ToString();
 srd["SendFromIdAlQ"].ToString();

انا احتاج ان اجلب بياناتهم مع بعض في نفس الوقت كيف يمكن توجيه كل سطر منهم الى سطر الاستعلام المناسب له 

انا قمت بوضعهم بشكل هذا ولكن فقط احصل على النتائج من الشق الاول من الاستعلام بمعنى لا ينتقل الى الشق الثاني منه بعد UNION ALL 

هل توجد طريقة لتوجيه الاستعلام لكل سطر على حده ؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 12/18/2021 at 16:19 قال Wael Aljamal:

يمكنك تمرير قيمة ثابتة لكل سطر في ناتج الاستعلام مثل type = x لتعرف سطر اول او ثاني 

 SELECT *, 'R1' AS type FROM table

و مرر R2 للاستعلام الثاني ثم يمكنك معرفة كل سطر من الناتج لمن يعود

حل آخر، لا بأس بعمل استعلامين، وخزن نتيجتهما في متغيري منفصلين و طبق الشرط الذي يحلو لك لكل ناتج.

شكرا لك اخي الكريم 

مع الاسف لم تضبط لدي الحل الاول ثم قمت باتباع الحل الثاني وعمل دالة استعلام منفصله وقد نجح الامر 

كل الشكر لك الغالي

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...