web-dev-qa-db-fra.com

Trouver dans SET pour obtenir les valeurs distinctes avec la virgule

Avant d'avoir posé le même problème ( Table de jointure avec émission de virgule (mySQL) ) sur la table de jointure avec virgule dans la colonne.

J'ai deux tables, une structure de table comme ci-dessous:

Nom de la première table: Étudiant

id   | name   | course_id
——————————————————————————
1      David     1,3 
2      Peter     2,4
3      Shawn     2,6

Deuxième nom de table: Sujet

id    |    subject
———————————————————
1          English
2          Maths
3          Science
4          Geographic
5          Accounting
6          Art & Design

J'ai essayé cette méthode Find_in_set ( Rechercher avec la valeur séparée par des virgules MySQL ), mais il ne peut pas obtenir le résultat réel. Je veux que le résultat réel soit comme ci-dessous:

id   | name | subject_name
——————————————————————————
1      David   English,Science
2      Peter   Maths,Geographic
3      Shawn   Maths,Art & Design

J'utilise ci-dessous le code:

SELECT student.id as id,student.name as name,student.subject as subject_name
FROM student
INNER JOIN subject
ON FIND_IN_SET(subject.id, student.course_id) > 0

Mais le résultat m'a montré comme ci-dessous:

id   | name | subject_name
——————————————————————————
1      David   English
2      David   Science
3      Peter   Maths
4      Peter   Geographic
5      Shawn   Maths
6      Shawn   Art & Design

J'espère que quelqu'un me guider sur la façon de résoudre ce problème. Merci.

2
David Holly

Comme ça

SELECT student.id as id, student.name as name, GROUP_CONCAT(subject.subject) as subject_name
FROM student
INNER JOIN subject
ON FIND_IN_SET(subject.id, student.course_id) > 0
GROUP BY student.id, student.name

Habituellement, nous ne concessons pas tout dans la requête SQL, mais vous pouvez faire

SELECT CONCAT_WS(' ', student.id, student.name, GROUP_CONCAT(subject.subject)) as concated_value
FROM student
INNER JOIN subject
ON FIND_IN_SET(subject.id, student.course_id) > 0
GROUP BY student.id, student.name
2
ProGu