Menu
CoddyTech

Ôn tập về phép tự nối

Thuộc phần Kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 47 trên 72.

challenge icon

Thử thách

Khó

Các bảng và cột hiện có:

  • friends: id, name, friend_id

Với mỗi người trong bảng bạn bè, hãy tìm tất cả các kết nối bạn của bạn bè của họ. Kết nối bạn của bạn bè xảy ra khi người A là bạn với người B, rồi người B lại là bạn với người C. Liệt kê các kết nối này thành ba cột:

  • friend1: người bắt đầu
  • friend2: bạn trực tiếp của họ
  • friend3: bạn của bạn họ

Quy tắc:

  • Không đưa vào các trường hợp friend3 là cùng một người với friend1
  • Sắp xếp kết quả theo tên của friend1 theo thứ tự giảm dần

Ví dụ: Nếu Alice là bạn với Bob, còn Bob là bạn với Carol, thì Alice-Bob-Carol là một kết nối bạn của bạn bè hợp lệ.

Tự làm thử

-- Nối bảng với chính nó hai lần để mỗi hàng chứa một chuỗi gồm ba người
SELECT ____ AS friend1, ____ AS friend2, ____ AS friend3
FROM friends f1
JOIN friends f2 ON ____
JOIN friends f3 ON ____
-- Loại bỏ các chuỗi quay lại người ở đầu chuỗi
WHERE ____
ORDER BY ____ DESC;

Tất cả bài học trong Kiến thức cơ bản

Tự luyện tập: Playground SQL