2015-05-30 33 views
0

我必須在SQL過程表和學生如何從兩個表中使用SQL連接

課程表具有以下字段

courseid coursename courseduration 

學生表有以下字段

rollno name address courseid 
選擇表

我想要的結果如下

BCA 
    abc 
    def 
    pqr 
MCA 
    stu 
    ijk 
BTECH 
    xyz 

我申請內部加盟了像以下建議我查詢所需的結果 我查詢以下內容:

SELECT student.name 
FROM student 
INNER JOIN course 
ON student.courseid=course.courseid; 
+0

這樣的縮進最好留給表現層(例如,在網頁上)。你可以做的是在選擇中包含'coursename',並按順序排列。屏幕將需要分組和縮進。 – StuartLC

+0

您還需要選擇'course.coursename',而不僅僅是'student.name'。所以你會有'SELECT course.coursename,學生。名稱「等 – Kusalananda

+0

爲什麼你不爲每個課程的group_concat'student.name'? – Beginner

回答

0

這裏有一些選擇

1)選擇和順序由包括課程名稱它 - 它會在每行的當然

SELECT course.name, student.name 
FROM student 
INNER JOIN course 
ON student.courseid=course.courseid 
ORDER BY course.name; 

將返回

重複學生

您會在您的表示層中進行縮進,例如每次課程名稱更改時都會縮進。

2)您可以使用GROUP_CONCAT對COURSE_NAME所有學生合併到單個列的分組

SELECT course.name, GROUP_CONCAT(student.name) AS Students 
FROM student 
INNER JOIN course 
ON student.courseid=course.courseid 
GROUP BY course.name; 

返回

Course Students 
BCA  abc, def, pqr 
MCA  stu, ijk 
BTECH xyz 

編輯,再我只想一列

那麼,您可以將課程名稱和學生姓名與UNION成一列,並使用排序黑客聯繫學生like this。事實上,你甚至可以添加空格來獲得縮進效果。但是這是解決了錯誤的問題 - 這種格式是表示層,不應該在Sql IMO中完成。

SELECT Name 
FROM 
(
    SELECT course.coursename AS Name, course.coursename AS Course, 1 As RowType 
    FROM course 

    UNION ALL 

    SELECT CONCAT(' ', student.name), course.coursename, 2 AS RowType 
    FROM student 
    INNER JOIN course 
    ON student.courseid=course.courseid 
) x 
ORDER BY Course, RowType; 

返回

BCA 
abc 
def 
pqr 
BTECH 
xyz 
MCA 
ijk 
stu 
+0

我想在BCA adesh john MCA等單列中得到結果.......所以在學生姓名下面的第一門課 –

+0

我已更新,但同樣,這種事情不適用於Sql。它的屏幕。 – StuartLC

1

你可以試試這個:

SELECT 
    course.name AS course_name, 
    GROUP_CONCAT(student.name) AS student_name 
FROM student 
INNER JOIN course 
ON student.courseid = course.courseid 
GROUP BY course.courseid; 

這會給你這樣的事情:

Course_name | Student_name 
BCA   | abc,def,pqr 
MCA   | stu,ijk 
BTECH   | xyz 
+0

只記得用'course.name'(不是courseid)進行分組,因爲它是非聚合的select。 – StuartLC

+0

我不想在不同欄目中顯示學生姓名,請參閱我期望的輸出並建議如果可能的話 –

+0

@StuartLC謝謝。請記住:) – Beginner

0

試試這個

SELECT `name` 
FROM(
SELECT course.courseid, course.coursename AS `name` 
FROM course 
UNION 
SELECT student.courseid + 0.1 AS courseid, courseid.name AS `name` 
FROM student 
ORDER BY courseid ASC) AS ordered_list