05-11-21, 02:23 AM (آخر تعديل لهذه المشاركة : 05-11-21, 03:51 AM {2} بواسطة بسام محمدغانم.)
(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
اخي الكريم هلا شاركت معنا تفاصيل اعمدة الجداول من a الى d والحقول التي تريدها ان تنضم الى الاستعلام وياحبذا لو مثال على البيانات داخل الجداول وماتتوقعه كنتيجةللاستعلام ، وباذن الله نساعدك لاني احس انني اسير في الاتجاه الخاطئ بارك الله فيك
05-11-21, 04:07 AM (آخر تعديل لهذه المشاركة : 05-11-21, 08:39 AM {2} بواسطة بسام محمدغانم.)
(05-11-21, 02:59 AM)Anas Mahmoud كتب : اخي الكريم هلا شاركت معنا تفاصيل اعمدة الجداول من a الى d والحقول التي تريدها ان تنضم الى الاستعلام وياحبذا لو مثال على البيانات داخل الجداول وماتتوقعه كنتيجةللاستعلام ، وباذن الله نساعدك لاني احس انني اسير في الاتجاه الخاطئ بارك الله فيك
هذا المرفق يوضح المطلوب وفيه الاستعلام جاهز عند عملية ارسال الاستعلام من لغة البرمجة يظهر رسالة خطأ
تبين ان عملية الانضمام ليست معتمدة
لكن في الاكسس شغال
ملاحظة اذا دخلت على محرر sql و غيرت اي شي حتى لو اضفت مسافة في المحرر و تراجعت بي ctrl+z يرفض الاستعلام تمام بعد ان كان شغال في الاكسس مباشرة
لا اعلم لماذا
و اعتقد ان سبب الرفض عند الارسال يعود لنفس السبب عند اي تغير في المحرر sql
الحل اخي الكريم ان تفصل الاستعلامات استعلام لكل ما له علاقة ببعض
قمت بعمل استعلام للمراكز والارصدة وقمت بجعله يظهر جميع حقول المراكز سميته 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
يعطي نفس النتيجة من مرة واحدة ولكني لا احبذه لتعقيده الشديد ، احب تبسيط المسائل وتجزيئها
ارفقت اليك مثال يجرب الطريقة المدرجة والاستعلام الجاهز وطريقة الاستعلام الواحد الطويل ونفس النتيجة
05-11-21, 10:22 PM (آخر تعديل لهذه المشاركة : 06-11-21, 12:30 AM {2} بواسطة بسام محمدغانم.)
(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
يعطي نفس النتيجة من مرة واحدة ولكني لا احبذه لتعقيده الشديد ، احب تبسيط المسائل وتجزيئها
ارفقت اليك مثال يجرب الطريقة المدرجة والاستعلام الجاهز وطريقة الاستعلام الواحد الطويل ونفس النتيجة
وفقك الله
انا اشكرك جداااااااااااااااااااااااااااااااااااااااااااااااا شكر عنيف شكر خاااااااااااااااااااااااااااااااااااص شكر حللللللللللللللللللللللللللللللو
افدتني كثيرا بطلب منك طلب دلني على رابط اتعلم منة الاستعلامات اكسس من النت