Menu
CoddyTech

回顾:自连接

本课属于 Coddy SQL 学习旅程的“基础知识”单元。第 47 课,共 72 课。

challenge icon

挑战

困难

可用的表和列:

  • friends:id,name,friend_id

对于 friends 表中的每个人,找出他们所有的朋友的朋友关系。如果 A 和 B 是朋友,而 B 又和 C 是朋友,那么 A、B、C 就构成一条朋友的朋友关系。将这些关系列为三列:

  • friend1:起始的人
  • friend2:他们的直接朋友
  • friend3:他们朋友的朋友

规则:

  • 不要包含 friend3 和 friend1 是同一个人的情况
  • 按 friend1 的姓名降序排列结果

示例:如果 Alice 和 Bob 是朋友,而 Bob 和 Carol 是朋友,那么 Alice-Bob-Carol 就是一条有效的朋友的朋友关系。

亲手试试

-- 将表与自身连接两次,让每一行包含由三个人组成的关系链
SELECT ____ AS friend1, ____ AS friend2, ____ AS friend3
FROM friends f1
JOIN friends f2 ON ____
JOIN friends f3 ON ____
-- 排除最终又回到起点人物的关系链
WHERE ____
ORDER BY ____ DESC;

基础知识中的所有课

自己练习: SQL 在线编辑器