所以我有三个表(粗体字是主键):
学生= {[学生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;
如何消除这样的组合?
注意:这不是作业。
答案 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