Как вернуть имя по номеру идентификации из того же набора данных?

Вопрос или проблема

Я хочу написать запрос, который возвращает имена и имена их лучших друзей из таблицы ниже:

Пример таблицы FRIEND:

FriendID Имя ЛучшийДругID
1 Эбби
2 Боб 3
3 Карл 2

Ожидаемый результат:

Имя Лучший друг
Эбби
Боб Карл
Карл Боб

Мой код на данный момент:

SELECT A.Name, B.BestFriendID AS Bestfriend
FROM FRIEND A, FRIEND B
WHERE A.FriendID = B.BestFriendID;

Проблема в том, что результат возвращает ID оригинального друга:

Имя Лучший друг
Эбби 1
Боб 2
Карл 3

Так что я упустил? Буду благодарен за любую помощь.

Вы близки! Вам нужно объединить таблицы по ЛучшийДругID, а затем выбрать имя друга, вы забыли об этом – попробуйте так:

SELECT A.Name, B.Name AS Bestfriend
FROM FRIEND A
LEFT JOIN FRIEND B ON A.BestFriendID = B.FriendID;

Ответ или решение

Конечно! Давайте разберёмся с вашей задачей.

У вас есть таблица "FRIEND", которая содержит информацию о друзьях, а именно их ID, имена и ID лучших друзей. Вы хотите написать запрос, который вернёт имена друзей и их лучших друзей.

Ваш текущий код использует старый стиль соединения таблиц, что приводит к ошибочному выводу. Вам нужно использовать JOIN, чтобы корректно связать таблицу с самой собой на основе идентификатора лучшего друга. Ваша цель состоит в том, чтобы получить имя друга и имя его лучшего друга.

Вот корректный SQL-запрос:

SELECT A.Name, B.Name AS Bestfriend
FROM FRIEND A
LEFT JOIN FRIEND B ON A.BestFriendID = B.FriendID;

Объяснение запроса:

  1. SELECT: Мы выбираем два поля: A.Name (имя друга) и B.Name (имя лучшего друга). Для этого мы используем псевдонимы A и B, чтобы отличить два экземпляра одной и той же таблицы.

  2. FROM FRIEND A: Здесь мы обозначаем первый экземпляр таблицы "FRIEND" как A.

  3. LEFT JOIN FRIEND B: Мы используем левое соединение (LEFT JOIN), чтобы получить все записи из таблицы A даже в том случае, если у некоторых друзей нет лучшего друга.

  4. ON A.BestFriendID = B.FriendID: Этот критерий соединения говорит SQL, что мы соединяем BestFriendID из таблицы A с FriendID во втором экземпляре B.

Пояснения к ожидаемому результату:

  • Данные о друге с FriendID 1 (Абби) не имеют лучшего друга, поэтому в соответствующей ячейке будет значение NULL.
  • Друзья с FriendID 2 (Боб) и FriendID 3 (Карл) имеют друг друга в качестве лучших друзей, поэтому в их соответствующих ячейках будут их имена.

Таким образом, запрос выдаст ожидаемый вывод:

Name Bestfriend
Abby
Bob Carl
Carl Bob

Это должно решить вашу задачу. Если у вас есть дополнительные вопросы, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...