2015-05-30 3 views
0

меня к столу в SQL курса и студентКак выбрать таблицу из двух таблиц с помощью SQL присоединиться

стол Курс имеет следующие поля

courseid coursename courseduration 

Student таблица имеет следующие поля

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

Такой отступ лучше всего оставить на уровне презентации (например, на веб-странице). То, что вы можете сделать, это включить 'courseame' в select и также заказать его. Экран нужно будет группировать и отступать. – StuartLC

+0

Вам также нужно будет выбрать 'course.coursename', а не только' student.name'. Итак, у вас будет SELECT course.coursename, студент.name' и т. д. – 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; 

который будет возвращать

Course Student 
BCA abc 
BCA def 
BCA pqr 
MCA stu 
MCA ijk 
BTECH xyz 

Вы должны сделать отступы в своем уровне представления, например. путем отступов при каждом изменении названия курса.

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' (not courseid), поскольку он не агрегируется. – 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 
Смежные вопросы