получение связанных предметов для студента в MySQL - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь получить предметы, ученики которых зачислены с использованием MySQL.

Студенческий стол:

Student table format

таблица предметов:

Subject table format

Учащиеся зачислили предметы:

stu_subjects  table format

Мой запрос:

select *,(select  subject_id from  stu_subjects ss where ss.student_id = 
s.student_id ) as subject_id
from student s

при выполнении вышеуказанного запроса я получаю сообщение об ошибке ниже:

Error

Поэтому я изменил свой запрос, как показано ниже (добавлен лимит 1):

select *,(select  subject_id from  stu_subjects ss where ss.student_id = 
s.student_id limit 1) as subject_id
from student s

Окончательный вывод: final output

Если вы видите результат, я получаю только один предмет, сопоставленный со студентом. Но мне нужен каждый предмет, который студент записал. Так как мне этого добиться?

Я пытаюсь достичь: What I'm trying to achieve is

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Althought Jagrut Sharma ответ правильный, эта версия определяет разделитель идентификаторов субъектов и использует явный JOIN вместо неявного.

Редактировать : Похоже, что , является разделителем по умолчанию, поэтому вы можете опустить его из GROUP_CONCAT. Я оставлю это в своем запросе, чтобы вы знали, как изменить его, если это необходимо.

SELECT st.student_id, st.student_name
       GROUP_CONCAT(sb.subject_id SEPARATOR ',')
FROM stu_subjects sb JOIN student st ON sb.student_id = st.student_id
GROUP BY st.student_id;
0 голосов
/ 02 мая 2018

Вы можете использовать простой запрос соединения для достижения этого.

SELECT st.student_id,st.student_name,sb.subject_name
FROM student st 
JOIN stu_subjects ss ON (ss.student_id = st.student_id)
JOIN Subject  sb ON (ss.subject_id = sb.subject_id )

Также, как вы упомянули, если вы хотите только для субъекта MySQL, то добавьте ниже, где условие

WHERE subject_name ='MySQL'
0 голосов
/ 02 мая 2018

Используйте этот запрос:

select a.student_id, b.student_name, group_concat(a.subject_id) as student_enrollment
from stu_subjects a, student b
where a.student_id = b.student_id
group by a.student_id, b.student_name;

Иллюстрация:

-- table: student
> select * from student;
+------------+--------------+
| student_id | student_name |
+------------+--------------+
|          1 | Student-1    |
|          2 | Student-2    |
+------------+--------------+

-- table: subject
> select * from subject;
+------------+--------------+
| subject_id | subject_name |
+------------+--------------+
|          1 | Maths        |
|          2 | Science      |
|          3 | English      |
|          4 | Telugu       |
|          5 | Social       |
+------------+--------------+

-- table: stu_subjects
> select * from stu_subjects;
+------------+------------+------------+
| stu_sub_id | student_id | subject_id |
+------------+------------+------------+
|          1 |          1 |          1 |
|          2 |          1 |          2 |
|          3 |          1 |          3 |
|          4 |          2 |          4 |
|          5 |          2 |          1 |
+------------+------------+------------+

-- query
> select a.student_id, b.student_name, group_concat(a.subject_id) as student_enrollment
from stu_subjects a, student b
where a.student_id = b.student_id
group by a.student_id, b.student_name;

+------------+--------------+--------------------+
| student_id | student_name | student_enrollment |
+------------+--------------+--------------------+
|          1 | Student-1    | 3,1,2              |
|          2 | Student-2    | 4,1                |
+------------+--------------+--------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...