View Full Version : سوال: مشکل در تفریق دو جدول از هم!!!
mohsen_namad
سه شنبه 13 مهر 1389, 22:55 عصر
با سلام
ببخشید من دارم به سایت انتخاب واحد دانشجویی مینویسم. مشکلی که دارم اینه که یه تیبل اصلی دارم که تمام دروس کاربر توش هست و یه تیبل دیگه هم دارم که دروسی که کاربر پاس کرده تو اون قرار داره حالا اگه بخوام دوروس پاس نشده رو بدست بیارم چطور میتونم این دوتا جدول رو از هم کم کنم که دروس پاس نشده بدست بیاد .
خواهش میکنم کمکم راهنماییم کنید من زیاد با sql کار نکردم.
AmirAmiri
سه شنبه 13 مهر 1389, 23:10 عصر
سلام.
SELECT * FROM tblMain AS m , tblPassed As p WHERE m.C_Name != p.C_Name
یه چیزی تو این مایه ها.
اگه C_Name اسم درس باشه باید یک SELECT از جدول tblMain (جدول اصلی) بگیری که نام درسهایی که تو جدول tblPassed هست رو نداشته باشه.
فکر کنم از NOT EXISTS هم میتونی استفاده کنی.
mohsen_namad
سه شنبه 13 مهر 1389, 23:13 عصر
من یجا این کد رو دیدم جواب میده؟
Select * from Table_1
EXCEPT
Select * from Table_2
ببخشد راستی این m , p تو کد بالا چی هستند؟
AmirAmiri
سه شنبه 13 مهر 1389, 23:48 عصر
من یجا این کد رو دیدم جواب میده؟
Select * from Table_1
EXCEPT
Select * from Table_2
ببخشد راستی این m , p تو کد بالا چی هستند؟
بله دوست عزیز این کدی که نوشتید هم در مواقعی که بخواید از یک جدول دو تا SELECT بگیرید و SELECT دومی رو از SELECT اولی کم کنید مناسب هست. مثال :
SELECT * FROM tblCustomers WHERE FName LIKE '%a%'
EXCEPT
SELECT * FROM tblCustomers WHERE LName LIKE '%a%'در این کد نام افرادی نمایش داده میشه که در نامشون حرف a وجود داشته باشه اما در فامیلشون حرف a وجود نداشته باشه.
ببخشد راستی این m , p تو کد بالا چی هستند؟ اونها اشاره میکنه به همون جدولی که نوشتم و معادل نامه جدول هست.
اون دستور رو به این شکل هم میشه نوشت :
SELECT * FROM tblMain, tblPassed WHERE tblMain.C_Name != tblPassed.C_Nameاون راهه قبلی رو برای این نوشتم که دستور کوتاه تر بشه.
موفق و پیروز باشید.
mohsen_namad
چهارشنبه 14 مهر 1389, 00:09 صبح
سلام.
SELECT * FROM tblMain AS m , tblPassed As p WHERE m.C_Name != p.C_Name
یه چیزی تو این مایه ها.
اگه C_Name اسم درس باشه باید یک SELECT از جدول tblMain (جدول اصلی) بگیری که نام درسهایی که تو جدول tblPassed هست رو نداشته باشه.
فکر کنم از NOT EXISTS هم میتونی استفاده کنی.
با تشکر از توضیحاتتون من اون کدی که گفتید رو نوشتم ولی جوابش اینطوری بود که دوتا جدول رو با هم قاطی می کنه و اون جواب رو نمیده.
AmirAmiri
چهارشنبه 14 مهر 1389, 00:14 صبح
درست میگید ببخشید یه کوچولو ایراد داشت :
SELECT tblMain.* FROM tblMain AS m , tblPassed As p WHERE m.C_Name != p.C_Name
موفق باشید.
mohsen_namad
چهارشنبه 14 مهر 1389, 00:32 صبح
کد اولی جواب میداد ولی این کد جدیدی که دادین جواب نمی ده
اینم کد سایته تو ضمیمه گذاشتم
SqlConnection con1 = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|Database.mdf;Integrated Security=true;User Instance=true");
con1.Open();
SqlDataAdapter tmm = new SqlDataAdapter("SELECT Course * FROM Course AS m , pass As p WHERE m.Course_ID <> p.Course_ID ", con1);
DataSet ds = new DataSet();
tmm.Fill(ds, "Course");
GridView3.DataSource = ds;
GridView3.DataBind();
con1.Close();
AmirAmiri
چهارشنبه 14 مهر 1389, 00:48 صبح
دوست عزیز کدی که شما نوشتید توی دستور SQL اشتباهه.
SELECT Course * FROM Course AS m , pass As p WHERE m.Course_ID <> p.Course_ID
باید به این صورت بنویسید:
SELECT Course.* FROM Course AS m , pass As p WHERE m.Course_ID <> p.Course_ID
شما بعد از Course باید نقطه بزارید که نذاشتید.
فکر کنم مشکل از همین باشه.
بازم تست کنید اگه ایراد داشت بگید تا خودم تست کنم.
mohsen_namad
چهارشنبه 14 مهر 1389, 00:56 صبح
باز ایرور میگیره
اینم ایرورش
The column prefix 'Course' does not match with a table name or alias name used in the query.
AmirAmiri
چهارشنبه 14 مهر 1389, 00:58 صبح
دوست عزیز خیلی خیلی عذر میخوام.
دستور SQL که گفته بودم اشتباه بود. باید از این روش استفاده کنید. خیلی خیلی عذر میخوام که باعث شدم وقتتون هدر بره.
SELECT * FROM Course WHERE ID NOT IN (SELECT ID FROM pass)
mohsen_namad
چهارشنبه 14 مهر 1389, 01:08 صبح
دوست عزیزم من باید عزر خواهی کنم که وقت شما روگرفتم. اگه بدونید چه مشکلی رو برای من حل کردید (چند روز بود گیر همین بودم). خدا امواتتونو بیامورزه .
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.