2 つの SQL テーブルがあります。
- 最初のテーブルには、部門 ID から学生 ID へのマッピングがあります。(学生は複数の学科に所属する場合があり、学科には多くの学生がいます)。
- 2 番目のテーブルには、学生とその趣味のマッピングがあります。(多対多の関係もあります)
テーブルのサンプル スナップショット:
DESC DEPARTMENT_STUDENTS;
----------------------------
DEPT_ID STUDENT_ID
----------------------------
Physics 123
Mathematics 111
Physics 111
CS 45
CS 56
Mathematics 89
DESC STUDENTS_HOBBIES;
-------------------------------
STUDENT_ID HOBBY
-------------------------------
111 Skiing
111 Singing
111 Browsing
123 Singing
123 Browsing
123 Reading
45 Origami
56 Origami
56 Making Prank Calls
89 Reading
学部ごとのすべての学生の共通の趣味のリストを提供するクエリを探しています。必要な出力は次のようになります。
-----------------------------------------
DEPT_ID GROUP_CONCAT(...)
-----------------------------------------
Physics (Singing, Browsing)
Mathematics ()
CS (Origami)
私はほとんどそこにいて、MySQL を少しいじった後、部門のすべての趣味 (一般的なものではない) をグループ化することができました。GROUP_CONCAT は、重複を排除する方法も提供します。私が考えることができる1つの方法は、以下のクエリでプログラムによって重複を取得することです:
SELECT DEPT_ID, GROUP_CONCAT(OP.HOBBIES) FROM DEPARTMENT_STUDENTS DS
INNER JOIN (SELECT STUDENT_ID, GROUP_CONCAT(HOBBY)AS HOBBIES FROM STUDENTS_HOBBIES
GROUP BY STUDENT_ID) OP
ON OP.STUDENT_ID = DS.STUDENT_ID
GROUP BY DS.DEPT_ID;
重複を単独で保存する方法はありますか? このクエリでも、最適化は大歓迎です。ありがとう!