نمایش نتایج 1 تا 8 از 8

نام تاپیک: قرار دادن دو جدول sql در کنار هم

  1. #1

    قرار دادن دو جدول sql در کنار هم

    سلام.
    من یک دیتابیس ساختم شامل جدولهای زیر:
    course : cid , name,grade
    student : sid, name, age, grade
    courseStudent : id , sid , cid

    که جدول courseStudent رابط برای ارتباط بین دو جدول هست و فیلدهای sid و cid این جدول با فیلدهای مربوطه در دو جدول دیگر کلید هستند. درسهایی که هر دانش آموز در آن ثبت نام کرده در این جدول ذخیره میشه.
    حالا می خوام کوئری بنویسم که sid , name , age , grade , firstCourse ,SecondCourse را با هم نشان دهد. هر دانش آموز فقط تا دو درس می تواند ثبت نام کند. می خوام درسهای ثبت نام شده یک دانش آموز در یک ردیف نمایش داده بشه.
    چطور باید بنویسم؟

  2. #2

    نقل قول: قرار دادن دو جدول sql در کنار هم

    لطفا اگر کسی میتونه راهنمایی کنه.الان نیاز دارم چند روز دیگه به دردم نمی خوره.

  3. #3

    نقل قول: قرار دادن دو جدول sql در کنار هم

    از pivot میتونید استفاده کنید.

  4. #4

    نقل قول: قرار دادن دو جدول 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


  5. #5

    نقل قول: قرار دادن دو جدول sql در کنار هم

    با تشکر از شما
    نتیجه کوئری شما اینطور میشه :sql.png
    این نتیجه درست نیست. برای دانش آموزی که فقط درس اول را انتخاب کرده باید درس دوم null نشون داده بشه.

  6. #6

    نقل قول: قرار دادن دو جدول 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 و .. رو بهش اضافه کنی
    انوقت میشه کد کاملتری براش نوشت

  7. #7

    نقل قول: قرار دادن دو جدول sql در کنار هم

    سلام
    اینکه از min و max برای تعیین درس اول و دوم استفاده کردید درست نیست.
    درس با آی دی کمتر ممکنه درس انتخابی دوم باشه و درس با آیدی بزرگتر ممکنه درس انتخابی اول باشه.
    در کد شما آیدی کمتر همیشه به عنوان درس اول انتخاب میشه.

  8. #8

    نقل قول: قرار دادن دو جدول sql در کنار هم

    سلام
    معمولا برای ID جدول نوع داده int با IDENTITY فعال قرار میدن که هر فیلد که اضافه شد یک شماره به ID اضافه بشه
    در این خالت رکوردی که اول وارد جدول میشه ID کوچکتری داره و تنیجه درسته
    اگه ID رو بخواهی خودت وارد کنی باز منطقی نیست رکوردی که اول وارد میشه مقدار بزرگتری داشته باشه
    البته با توجه به طراحی دیتابیست کد های بهتری می تونی بنویسی
    من فقط خواستم نمونه کد برای تبدیل سطر به ستون بهت بدم که نسبت به
    pivot آسون تره
    آخرین ویرایش به وسیله mehdi_79 : سه شنبه 27 خرداد 1399 در 06:31 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •