2017-04-13 22 views
0

我正在編寫一個SQL選擇查詢,它將檢索在couse_name字段中包含單詞「Development」的課程中註冊的所有學生的姓名。如何在SQL中正確使用左連接

我新手在這裏,這是我的SQL代碼:

select firstname, lastname 
FROM students INNER JOIN registrations 
ON students.student_id = registrations.student_id 
and course_name = registrations.course_name LIKE '%Development%'; 

這是錯誤的,我知道,我想知道如何使用左手,以獲取有效數據的正確連接。 我附上了一些表格的截圖。

學生表:

Students Table

課程表:

enter image description here

註冊記憶表:

enter image description here

+0

最這裏的人們想要格式化文本而不是圖像。 – jarlh

回答

1

使用此查詢

select students .firstname, students.lastname 
FROM students INNER JOIN registrations 
ON students.student_id = registrations.student_id 
inner join courses on courses.course_code=registrations.course_code 
where course.course_name LIKE '%Development%'; 
+0

謝謝!它的工作原理和我想要的一樣。 – Fala

1

我想我們ËIN子句和INNER JOIN,而不是一個左連接:

select s.* 
from students s 
where 
    student_id IN (
    select student_id 
    from registrations r inner join courses c 
     on r.course_code = c.course_code 
    where 
     c.course_name like '%Development%' 
) 

子查詢將從所有registrations其中course_name包含單詞Development返回所有student_id。外部查詢將返回來自這些student_id的所有學生信息。

+0

感謝您抽出寶貴時間回答它,它很有效,但不幸的是,這對我的項目而言太過先進。 – Fala

1

如果你想有一個查詢,它會顯示每個學生他是否不進行註冊的過程中,你可以使用一個LEFT JOIN如下:

SELECT s.firstname, 
     s.lastname, 
     CASE WHEN r.student_id IS NOT NULL 
      THEN 'registered' 
      ELSE 'not registered' END AS status 
FROM students s 
LEFT JOIN registrations r 
    ON s.student_id = r.student_id 
LEFT JOIN courses c 
    ON c.course_code = r.course_code AND 
     c.course_name LIKE '%Development%'; 
+0

謝謝你花時間回答它,它很有效,但不幸的是,這對我的項目來說太過先進。 – Fala