消除SQL中的组合

时间:2019-01-29 11:45:14

标签: mysql

所以我有三个表(粗体字是主键):


学生= {[学生ID:整数,名称:字符串]}

访问次数= {[ Student_ID:Integer,Lecture_ID:Integer ]}

讲座= {[ Lecture_ID:Integer ,Title:string]}


我想让所有参加相同讲座的学生显示在下一行。因此,例如Daniel和Peter都参观了代数讲座,应该这样显示:

+--------------+--------------+-------------------+
| Name         | Name         | Title             |
+--------------+--------------+-------------------+
| Daniel       | Peter        | Algebra           |
+--------------+--------------+-------------------+

但是用我的SQL查询会发生什么,我得到了这样的组合重复项:

+--------------+--------------+-------------------+
| Name         | Name         | Title             |
+--------------+--------------+-------------------+
| Daniel       | Peter        | Algebra           |
| Peter        | Daniel       | Algebra           |
+--------------+--------------+-------------------+

这是我的SQL语句:

SELECT s1.Name, s2.Name, l.Title
FROM Students s1, Students s2, visits v1, visits v2, Lectures l
WHERE   s1.Student_ID != s2.Student_ID 
    AND s1.Student_ID = v1.Student_ID 
    AND s2.Student_ID = v2.Student_ID 
    AND v1.lecture_ID = l.lecture_ID;

如何消除这样的组合?
注意:这不是作业。

1 个答案:

答案 0 :(得分:0)

您可以按照以下步骤用>取消该操作

WHERE s1.Student_ID > s2.Student_ID

但是您可能要使用GROUP_CONCAT(),因为它可以在同一堂课中有两个以上的学生时使用。

SELECT GROUP_CONCAT(s.Name ORDER BY s.Name) Names, l.Title
  FROM Lectures l
  JOIN Visits v ON l.lecture_ID = v.lecture_ID
  JOIN Students s ON v.Student_ID = s.Student_ID
 GROUP BY l.Title
 ORDER BY l.Title