我有两个带有给定字段的表
高中生
- 姓名
- 年级
- ID
喜欢
- id1
- id2
HighSchooler 保存有关高中生的信息,而 Likes 是一个关系表,显示谁在高中时喜欢谁。id1 的学生喜欢 id2 的学生。有两种方式的关系(当约翰喜欢露西但露西不喜欢约翰时)和两种方式的关系(当阿尔伯特喜欢桑德拉而桑德拉也喜欢阿尔伯特时)。
我需要一个返回两列的查询,其中两列的名称是双向关系,即如果 A 喜欢 B 并且 B 喜欢 A,那么示例结果集将是
name | name
A B
我摆弄它并提出了这个查询,但我不理解它,也不认为它是最佳的。
SELECT DISTINCT a.name, b.name
FROM Highschooler a, Highschooler b, Likes l1
JOIN Likes l2 on l1.ID1=l2.ID2
WHERE a.ID=l1.ID2 AND b.ID=l1.ID1 AND a.ID=l2.ID1 AND a.ID > b.ID;