Похоже, вам нужно резюмировать о том, как работать с несколькими взаимоотношений между те же две таблицы.
Ваша подарочная таблица имеет отношения, которые описывают, кто дал подарок - я называю это дарителем здесь; и отношения, которые описывали, кто получил подарок - я называю это получателем здесь. Оба отношения от подарка много-к-одному к таблице пользователей.
Вы просто присоединяетесь к одной таблице дважды и дадите этой таблице хорошее имя корреляции - получатель и получатель в моем примере - чтобы показать в коде, для чего вы их используете.
Как так:
WITH
gift(fromid,toid) AS (
SELECT 1,2
UNION ALL SELECT 2,6
UNION ALL SELECT 3,2
UNION ALL SELECT 5,3
)
,
users(userid,username) AS (
SELECT 1,'A'
UNION ALL SELECT 2,'B'
UNION ALL SELECT 3,'C'
UNION ALL SELECT 4,'D'
UNION ALL SELECT 5,'E'
UNION ALL SELECT 6,'F'
)
SELECT
giver.username as fromUser
, receiver.username as toUser
FROM gift
JOIN users AS giver
ON gift.fromid=giver.userid
JOIN users AS receiver
ON gift.toid =receiver.userid
ORDER BY 1,2
;
fromUser|toUser
A |B
B |F
C |B
E |C