قرار دادن دو جدول sql در کنار هم
سلام.
من یک دیتابیس ساختم شامل جدولهای زیر:
course : cid , name,grade
student : sid, name, age, grade
courseStudent : id , sid , cid
که جدول courseStudent رابط برای ارتباط بین دو جدول هست و فیلدهای sid و cid این جدول با فیلدهای مربوطه در دو جدول دیگر کلید هستند. درسهایی که هر دانش آموز در آن ثبت نام کرده در این جدول ذخیره میشه.
حالا می خوام کوئری بنویسم که sid , name , age , grade , firstCourse ,SecondCourse را با هم نشان دهد. هر دانش آموز فقط تا دو درس می تواند ثبت نام کند. می خوام درسهای ثبت نام شده یک دانش آموز در یک ردیف نمایش داده بشه.
چطور باید بنویسم؟
نقل قول: قرار دادن دو جدول sql در کنار هم
لطفا اگر کسی میتونه راهنمایی کنه.الان نیاز دارم چند روز دیگه به دردم نمی خوره.
نقل قول: قرار دادن دو جدول sql در کنار هم
از pivot میتونید استفاده کنید.
نقل قول: قرار دادن دو جدول sql در کنار هم
سلام
کدش رو برات نوشتم می تونی استفاده کنی :
select sc.sid,sc.name,sc.age,sc.grade,c1.name firstCourse ,c2.name SecondCourse
FROM
(SELECT student.sid, student.name, student.age, student.grade, min(course.cid) as min_CID, max(course.cid) as max_CID
FROM course INNER JOIN
courseStudent ON course.cid = courseStudent.cid INNER JOIN
student ON courseStudent.sid = student.sid
GROUP BY student.sid, student.name, student.age, student.grade) sc
LEFT OUTER JOIN (SELECT cid, name FROM course) C1
ON C1.cid = Sc.min_CID
LEFT OUTER JOIN (SELECT cid, name FROM course) C2
ON C2.cid = Sc.max_CID
1 ضمیمه
نقل قول: قرار دادن دو جدول sql در کنار هم
با تشکر از شما
نتیجه کوئری شما اینطور میشه :ضمیمه 151845
این نتیجه درست نیست. برای دانش آموزی که فقط درس اول را انتخاب کرده باید درس دوم null نشون داده بشه.
نقل قول: قرار دادن دو جدول sql در کنار هم
سلام
اصلاحش راحته این کد رو امتحان کن :
select sc.sid,sc.name,sc.age,sc.grade,c1.name firstCourse ,c2.name SecondCourse
FROM
(SELECT student.sid, student.name, student.age, student.grade, min(course.cid) as min_CID,
case COUNT(course.cid)
when 1 then null
when 2 then max(course.cid)
end as max_CID
FROM course INNER JOIN
courseStudent ON course.cid = courseStudent.cid INNER JOIN
student ON courseStudent.sid = student.sid
GROUP BY student.sid, student.name, student.age, student.grade) sc
LEFT OUTER JOIN (SELECT cid, name FROM course) C1
ON C1.cid = Sc.min_CID
LEFT OUTER JOIN (SELECT cid, name FROM course) C2
ON C2.cid = Sc.max_CID
ولی کدی که نوشتم با توجه به دیتا بیس تو بود
استفاده از min و max برای دو درس جواب میده اگه درس سوم داشته باشی جواب نمیده
بهتره در جدول course یک فیلد اضافه کنی و
firstCourse و SecondCourse و .. رو بهش اضافه کنی
انوقت میشه کد کاملتری براش نوشت
نقل قول: قرار دادن دو جدول sql در کنار هم
سلام
اینکه از min و max برای تعیین درس اول و دوم استفاده کردید درست نیست.
درس با آی دی کمتر ممکنه درس انتخابی دوم باشه و درس با آیدی بزرگتر ممکنه درس انتخابی اول باشه.
در کد شما آیدی کمتر همیشه به عنوان درس اول انتخاب میشه.
نقل قول: قرار دادن دو جدول sql در کنار هم
سلام
معمولا برای ID جدول نوع داده int با IDENTITY فعال قرار میدن که هر فیلد که اضافه شد یک شماره به ID اضافه بشه
در این خالت رکوردی که اول وارد جدول میشه ID کوچکتری داره و تنیجه درسته
اگه ID رو بخواهی خودت وارد کنی باز منطقی نیست رکوردی که اول وارد میشه مقدار بزرگتری داشته باشه
البته با توجه به طراحی دیتابیست کد های بهتری می تونی بنویسی
من فقط خواستم نمونه کد برای تبدیل سطر به ستون بهت بدم که نسبت به pivot آسون تره