تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الى عباقرة البرمجة جملة select غير عادية
#1
السلام عليكم و رحمة الله و بركاته



اريد أن أسأل كيف يمكن طرح نتيجتين من جملة استعلام select  في فيجوال بيسك دوت نت

بمعنى اريد مثلا لعمود موجود في جدولين ان اطرح نتيجة الاول من الثاني ثم اظهار النتيجة في داتاجريد فيو



مثال عندي جدول باسم Customers  و جدول آخر باسم  payments مثلا و هما الاثنين يحتويان على عمود باسم  CustName مثلا فأريد ان استعلم عن الجدول الاول ثم اطرح منه نتيجة استعلام الجدول الثاني 


مثلا 



كود :
Dim dt1, dt2 As New DataTable
       Dim da1, da2 As New OleDbDataAdapter
       da1 = New OleDbDataAdapter("select * from Customers ", Conn)
       da1.Fill(dt1)

       da2 = New OleDbDataAdapter("select * from Payments ", Conn)
       da2.Fill(dt2)



أنا اريد طرح نتيجة dt2 من نتيجة dt1  و اظهار النتيجة في داتا جريد فيو فكيف يكون هذا 
يعني لو نتيجة dt1  مثلا 20 اسم في عمود CustName الخاص بجدول Customers و نتيجة dt2 مثلا 6  اسماء  في عمود CustName الخاص بجدول Payments  و انا عايز اظهر ال 20 اسم ناقص ال 6 اسماء يعني 14 بس اللي يظهروا مع العلم ان اي اسم موجود في عمود CustName اللي في جدول Payments  لازم حيكون موجود في جدول Customers




و لكم جزيل الشكر و ارجو ان اكون قد أوضحت المقصد
الرد
تم الشكر بواسطة:
#2
انا مش فاهم بصراحة فكرة الطرح دي ليه على العموم

لو عاوز في جملة select تضم جدولين مع بعض استخدم UNION  
مثل
SELECT name FROM ACCOUNT_T UNION SELECT name FROM USERS_T
كل الاسماء في صف واحد

ولو عاوز تظهر نتيجة الجدولين بدون تكرار حط شرط اني مثلا حقل name في الجدول الاول =  حقل name في الجدول الثاني
لو عاوز تظهر الجدول 20 اسم - 6 اسم اعكس الشرط السابق
يعني الجدول20 اسم لا يساوي الجدول 6 اسم

يارب يكون هو ده الى محتاجه
صلى الله على نبينا محمد
اخيكم / محمود صالح
  قال الزهري رحمه الله  
 مــا عُـــبـِد الله بشئ أفضل من العلم 
الرد
تم الشكر بواسطة:
#3
إقتباس :
SELECT * FROM Customers C
LEFT JOIN Payments P ON C.CustName = P.CustName
WHERE P.CustName Is Null

هذا يعني جلب كل السجلات الموجودة في Customers  وليست موجودة في Payments 

C  حرفياً هي الجدول Customers 
 حرفياً هي الجدول  Payments



فقط لتسهيل قرائة الإستعلام من قبل المبرمج عند كتابة وإنشاء الإستعلام (بمعنى آخر شكل الإستعلام يصبح مفهوم أكثير للمبرمج)


ليصبح الكود كالتالي :
PHP كود :
Dim dt1 As New DataTable
Dim da1 
As New OleDbDataAdapter("SELECT * FROM Customers C LEFT JOIN Payments P ON C.CustName = P.CustName WHERE P.CustName Is Null"Conn)
da1.Fill(dt1


وإحذف الباقي 

جرب الإستعلام ,, وأبلغني بالنتيجة
الرد
تم الشكر بواسطة: HASAN6.0 , HASAN6.0 , الحسين احمد
#4
PHP كود :
SELECT  *
FROM    Customers C
WHERE   NOT EXISTS
        
(
        
SELECT  CustName
        FROM    payments P
        WHERE   P
.CustName C.CustName
        

الرد
#5
شكراً أخي عبدالله الدوسري و أخي HASAN6.0  على مجهودكم و لكن للاسف لم تفلح الاكواد معي

اخي عبدالله الدوسري جملة is Null لا تفي بالغرض عندي حيث اني اريد الاسماء الموجودة في Customers و غير موجودة في payments  و ليس التي قيمتها null ارجو ان اكون قد أوصلت مقصدي
أخي [b]HASAN6.0[/b]   اريد ان اعرف اكثر عن جملة not exists ربما تفيدني فيما اريد كيف تكون صيغتها
الرد
تم الشكر بواسطة:
#6
أرفق قاعدة البيانات هنا :
وماذا تعني IS NULL ؟ , بصراحة لا أستطيع توصيل المعلومة لك بطريقة مبسطة
ولكن بالتأكيد هي تعني شيء مختلف عن الذي فهمته أنت
أنا لا ابحث عن الأسم عندما يكون Null في Customers
بل عندما يكون السجل الموجودة في Customers ( علاقتة بالجدول  payments) تساوي NULL >>> وهذا يعني أن السجل في Customers غير مرتبط بأي سجل في الجدول payments
WHERE P.CustName Is Null
لاحظ الــ P تعود للجدول payments

أتمنى إني قدرت أبسطها لك 

يجب أن تكون لديك معرفة بــ LEFT JOIN وأخواتها ويكون لديك تجربة فيها وفكرة عن النتائج التي ستحصل عليها حتى تستوعب ماذا أقصد بــ WHERE P.CustName Is Null أو ما هي الفكرة من ورائها أو الهدف
الرد
تم الشكر بواسطة: الحسين احمد
#7
جرب دي 
كود :
SELECT customers.custname FROM customers,payments WHERE customers.custname not like payments.custname GROUP BY customers.custname
صلى الله على نبينا محمد
اخيكم / محمود صالح
  قال الزهري رحمه الله  
 مــا عُـــبـِد الله بشئ أفضل من العلم 
الرد
تم الشكر بواسطة:
#8
الجملة صحيحة 100% حيث تعطيك كل الاسماء الموجودة في الجدول الاول ( customers ) وغير موجودة في الجدول الثاني ( Payments ) .
راجع هذا الرابط

بالتوفيق
الرد
تم الشكر بواسطة:
#9
أخي الكريم [b]عبدالله الدوسري جزاك الله كل خير الكود عمل معي و الحمد لله كان هناك خطأ مني[/b]

[b]الف شكر [/b]
الرد
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم