منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : طريقة الضم LEFT JOIN متعددة
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم

هذا مثال للكود 
لثلاثة جداول و عملت عليهم ربط 
الان اريد ان اضيف  عمود Age من جدول D
كود :
SELECT A.COD,a.namee, B.NAMEE,C.NAMEE

FROM  ((A INNER JOIN B ON A.COD = B.COD)
               LEFT JOIN C ON A.COD = C.COD)
يعني المتوقع هذا الكود

كود :
SELECT A.COD, a.name , B.NAME,C.NAME ,D.Age
FROM  ((A INNER JOIN B ON A.COD = B.COD)
               LEFT JOIN C ON A.COD = C.COD) , D
لكن في الاكسس تظهر رسالة خطاء نص الرسالة تفيد ان طريقة JOIN غير معتمدة 


هل توجد طريقة لحل هذا الامر
لماذا لا تستخدم Query Design View اسهل في الاكسس

[attachment=27141]

[attachment=27145]

[attachment=27146]

[attachment=27144]

بكل بساطة تجد الاستعلام المطلوب

كود :
SELECT A.cod, A.namee, B.namee, C.namee, D.Age

FROM D INNER JOIN (C INNER JOIN (B INNER JOIN A ON B.cod = A.cod) ON C.cod = A.cod) ON D.cod = A.cod;
(04-11-21, 03:48 PM)Anas Mahmoud كتب : [ -> ]لماذا لا تستخدم Query Design View اسهل في الاكسس









بكل بساطة تجد الاستعلام المطلوب

كود :
SELECT A.cod, A.namee, B.namee, C.namee, D.Age

FROM D INNER JOIN (C INNER JOIN (B INNER JOIN A ON B.cod = A.cod) ON C.cod = A.cod) ON D.cod = A.cod;
اشكرك على الرد لكن اريد ان اجعل البيانات من العمود A تظهر حتى لو لم توجد بيانات في العمود C او B
اعذرني ما تطلبه هو فعلا Left join

ويمكنك فعل ذلك ايضا باستخدام Query Design ،

اضغط على اي من الاسهم  التي تمثل العلاقة بين الجدولين ضغطا مزدوجا

ومن ثم اختار الاختيار الثاني الذي يضم كافة حقول جدول a

[attachment=27150]

وستعمل ان شاء الله 

[attachment=27151]

هذا الاستعلام يصبح مقبول بالنسبة ل access

كود :
SELECT A.cod, A.namee, B.namee, C.namee, D.Age
FROM ((A LEFT JOIN D ON A.cod = D.cod) LEFT JOIN C ON A.cod = C.cod) LEFT JOIN B ON A.cod = B.cod;
(04-11-21, 08:57 PM)Anas Mahmoud كتب : [ -> ]اعذرني ما تطلبه هو فعلا Left join

ويمكنك فعل ذلك ايضا باستخدام Query Design ،

اضغط على اي من الاسهم  التي تمثل العلاقة بين الجدولين ضغطا مزدوجا

ومن ثم اختار الاختيار الثاني الذي يضم كافة حقول جدول a



وستعمل ان شاء الله 



هذا الاستعلام يصبح مقبول بالنسبة ل access

كود :
SELECT A.cod, A.namee, B.namee, C.namee, D.Age
FROM ((A LEFT JOIN D ON A.cod = D.cod) LEFT JOIN C ON A.cod = C.cod) LEFT JOIN B ON A.cod = B.cod;

اذا كان يوجد 3  سجلات في جدول A و ثلاث سجلات في جدول D
عند الاستعلام اريد جميع السجلات من جدول A و جدول D

اعلم انه سيكون هناك تكرار في الاستعلام لأنه بدون قيود سيكون الناتج 9 سجلات من الجدولين و انا اريد ذألك لأني سأضع شروط على الجدولين
لكن اريد بنفس الوقت بيانات من جدولين B و C لكن اريد ربط B و C بجدول  A



كود :
SELECT [الدليل].رقم_الحساب, [الدليل].الاسم, [العملة].الاسم, [الارصدة].رقم_الحساب

FROM

((الدليل INNER JOIN العملة ON [الدليل].العملة = [العملة].العملة)

LEFT JOIN الارصدة ON [الدليل].رقم_الحساب = [الارصدة].رقم_الحساب)

RIGHT JOIN مركز ON [الارصدة].رقم_المركز = [مركز].رقم_المركز;

اريد تنفيذ هذا الاستعلام 
هذا هو المقصود لكن اكسس يرفض ذالك لماذا
اخي الكريم هلا شاركت معنا تفاصيل اعمدة الجداول من a الى d والحقول التي تريدها ان تنضم الى الاستعلام وياحبذا لو مثال على البيانات داخل الجداول وماتتوقعه كنتيجةللاستعلام ، وباذن الله نساعدك لاني احس انني اسير في الاتجاه الخاطئ بارك الله فيك
(05-11-21, 02:59 AM)Anas Mahmoud كتب : [ -> ]اخي الكريم هلا شاركت معنا تفاصيل اعمدة الجداول من a الى d والحقول التي تريدها ان تنضم الى الاستعلام وياحبذا لو مثال على البيانات داخل الجداول وماتتوقعه كنتيجةللاستعلام ، وباذن الله نساعدك لاني احس انني اسير في الاتجاه الخاطئ بارك الله فيك


هذا المرفق يوضح المطلوب وفيه الاستعلام جاهز عند عملية ارسال الاستعلام من لغة البرمجة يظهر رسالة خطأ 
تبين ان عملية الانضمام ليست معتمدة
لكن في الاكسس شغال
ملاحظة اذا دخلت على محرر sql و غيرت اي شي حتى لو اضفت مسافة في المحرر و تراجعت بي ctrl+z يرفض الاستعلام تمام بعد ان كان شغال في الاكسس مباشرة
لا اعلم لماذا 
و اعتقد ان سبب الرفض عند الارسال يعود لنفس السبب عند اي تغير في المحرر sql

https://drive.google.com/file/d/1GZD6YUH...sp=sharing
الحل اخي الكريم ان تفصل الاستعلامات استعلام لكل ما له علاقة ببعض 

قمت بعمل استعلام للمراكز والارصدة وقمت بجعله يظهر جميع حقول المراكز سميته CenterStocks :


[attachment=27156]

[attachment=27157]


كود :
SELECT center.*, Stocks.Debtor, Stocks.Creditor
FROM center LEFT JOIN Stocks ON center.No_Center = Stocks.No_Center;



واستعلام اخر للدليل والعملات سميته GuidesCoinsNames :


[attachment=27158]

[attachment=27159]


كود :
SELECT Guide.No_Guide, Guide.Namee, Coin.Namee
FROM Guide INNER JOIN Coin ON Guide.No_Coin = Coin.No_Coni;

وهكذا كل ما علينا فعله هو اضافة الاستعلامين الى استعلام جديد سميته MasterQuery بدون اي اسهم او اي شيء فقط اضف كل الحقول من  الاستعلامين  :
 

[attachment=27160]

[attachment=27161]


كود :
SELECT GuidesCoinsNames.*, CenterStocks.*, *
FROM GuidesCoinsNames, CenterStocks;

هذا كل شيء


الان كل ما عليك فعله داخل الفيجوال بيسيك هو استدعاء الاستعلام MasterQuery :

كود :
Select * from MasterQuery

 
ملاحظة انت على الخيار في ان تستخدم الاستعلامات المخزنة في قاعدة البيانات الاكسس كما فعلت انا ، او ان تستخدم صيغة الاستعلام الطويلة ،اذا اردت الاستعلام في خطوة واحدة فاليك هذا :



كود :
SELECT *
FROM  (SELECT Guide.No_Guide, Guide.Namee, Coin.Namee FROM Guide INNER JOIN Coin ON Guide.No_Coin = Coin.No_Coni)  AS x,
(SELECT center.No_Center, center.namee, Stocks.Debtor, Stocks.Creditor FROM center LEFT JOIN Stocks ON center.No_Center = Stocks.No_Center)  AS y

يعطي نفس النتيجة من مرة واحدة ولكني لا احبذه لتعقيده الشديد ، احب تبسيط المسائل وتجزيئها 

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

[attachment=27162]

وفقك الله
(05-11-21, 06:33 PM)Anas Mahmoud كتب : [ -> ]الحل اخي الكريم ان تفصل الاستعلامات استعلام لكل ما له علاقة ببعض 

قمت بعمل استعلام للمراكز والارصدة وقمت بجعله يظهر جميع حقول المراكز سميته CenterStocks :







كود :
SELECT center.*, Stocks.Debtor, Stocks.Creditor
FROM center LEFT JOIN Stocks ON center.No_Center = Stocks.No_Center;



واستعلام اخر للدليل والعملات سميته GuidesCoinsNames :







كود :
SELECT Guide.No_Guide, Guide.Namee, Coin.Namee
FROM Guide INNER JOIN Coin ON Guide.No_Coin = Coin.No_Coni;

وهكذا كل ما علينا فعله هو اضافة الاستعلامين الى استعلام جديد سميته MasterQuery بدون اي اسهم او اي شيء فقط اضف كل الحقول من  الاستعلامين  :
 






كود :
SELECT GuidesCoinsNames.*, CenterStocks.*, *
FROM GuidesCoinsNames, CenterStocks;

هذا كل شيء


الان كل ما عليك فعله داخل الفيجوال بيسيك هو استدعاء الاستعلام MasterQuery :

كود :
Select * from MasterQuery

 
ملاحظة انت على الخيار في ان تستخدم الاستعلامات المخزنة في قاعدة البيانات الاكسس كما فعلت انا ، او ان تستخدم صيغة الاستعلام الطويلة ،اذا اردت الاستعلام في خطوة واحدة فاليك هذا :



كود :
SELECT *
FROM  (SELECT Guide.No_Guide, Guide.Namee, Coin.Namee FROM Guide INNER JOIN Coin ON Guide.No_Coin = Coin.No_Coni)  AS x,
(SELECT center.No_Center, center.namee, Stocks.Debtor, Stocks.Creditor FROM center LEFT JOIN Stocks ON center.No_Center = Stocks.No_Center)  AS y

يعطي نفس النتيجة من مرة واحدة ولكني لا احبذه لتعقيده الشديد ، احب تبسيط المسائل وتجزيئها 

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



وفقك الله

انا اشكرك جداااااااااااااااااااااااااااااااااااااااااااااااا شكر عنيف شكر خاااااااااااااااااااااااااااااااااااص شكر حللللللللللللللللللللللللللللللو
افدتني كثيرا بطلب منك طلب دلني على رابط اتعلم منة الاستعلامات اكسس من النت
اخي الكريم اخواننا هنا يدلوك اكثر مني ان شاء الله
أنا هاوي جدا في ما يتعلق بالاكسس ولكني احب التجربة لا اكثر
الصفحات : 1 2