PDA

View Full Version : مشکل در استفاده از LEFT JOIN



krasus
یک شنبه 07 دی 1393, 00:05 صبح
سلام
من دو تا جدول دارم که یکیش نتایج آزمون دانش آموزان رو توش ثبت کردم و توی جدول دیگه اسم دانش آموزام ثبت شده.
حالا مشکل من اینجاست که می خوام یه دستور SELECT بنویسم که اسم تمام دانش آموزای کلاس مورد نظر من رو (که مثلا ۱۰ نفر هستن) که توی آزمون مورد نظر شرکت کرده اند بیاره و جلوی اسم دانش آموزا درصدشون رو نشون بده که خوب تا اینجای کار حله اما نکته اینجاست که دانش آموزایی که توی آزمون شرکت کردند ۸ نفر هستند. یعنی من توی لیست نتایج آزمون id هشت نفر از دانش آموزای کلاس مورد نظرم رو دارم پس باید جلوی اسم این دو نفری که آزمون ندادند برام null یا خالی بزاره.(اگه می خواستم از INNER JOIN استفاده کنم لیستی که برام میاورد ۸ تا رکورد داشت ولی من می خوام لیستم ۱۰ تا رکورد - به تعداد دانش آموزان کلاس مورد نظر - داشته باشه) توی جدول نتایج آزمون نتیجه آزمون نتیجه آزمون های مختلف از کلاس های مختلف ثبت شده. دوتا عکس از جدول ها رو قرار دادم که یکیش لیست تمام نتایج ثبت شده مربوط به آزمون مورد نظر در جدول نتایج آزمون هست و دیگری لیست اسامی دانش آموزان کلاس مورد نظر از جدول اسامی و اطلاعات دانش آموزان هست.

لیست تمام نتایج ثبت شده مربوط به آزمون مورد نظر در جدول نتایج آزمون :
126962
توی عکس بالا id افرادی که از کلاس مورد نظر هستن و توی آزمون شرکت کرده اند رو مشخص کردم.

لیست اسامی دانش آموزان کلاس مورد نظر از جدول اسامی و اطلاعات دانش آموزان :
126963
توی عکس بالا id افرادی رو که در آزمون مورد نظر شرکت نکرده اند(بقیه شرکت کرده اند) رو مشخص کرده ام.
ممنون میشم کمکم کنید که یه کوری برای این بنویسم
من که هرچی فکر کردم ...:گیج: اینجوری شدم:کف:
:لبخند:

golbafan
پنج شنبه 25 دی 1393, 12:42 عصر
برای داشتن view حتما اینکار لازمه
وجود رکورد!!!!
شما احتمالا برای view گفتی که مثلا رکورد هایی رو نشون بده که آی دی دانش آموز در دو جدول برابر باشه
وقتی رکوردی شامل null نداری چی رو نشون بده؟؟
برای اینکار رکورد شامل null رو به جدول نمرات اضافه کنید

یک راه دیکه استفاده از union all هست
یعنی افرادی که شرکت کردند رو نمایش بده
و با افرادی که شرکت نکردند جمع کنه

sajadsobh
پنج شنبه 25 دی 1393, 17:49 عصر
خب می تونید از LEFT JOIN استفاده کنید. مثلاً جدول سمت چپ رو تعیین کنید دانش آموزان کلاس A باشه.
بعد بیاین دانش آموزان کلاس A رو با جدول نتایج LEFT JOIN کنید. اینجوری Class_A LEFT JOIN Result
البته من مثال انتزاعی زدما. میخوام نوع پیوند رو نشونتون بدم. اینجوری میاد تمام رکوردهای موجود توی جدول سمت چپ رو برمیداره و با جدول سمت راست پیوند میده اگه هم از جدول سمت چپ با جدول سمت راست اشتراکی نبینه جلوش مقدار null قرار میده. همون چیزی که شما میخواین.


http://i.stack.imgur.com/VQ5XP.png