我想做一个选择,从同一个表中的两列中查找ID到Username的值:
表:Gift
FromID ToID
1 2
2 6
3 2
5 3
TableL Users
UserID Username
1 A
2 B
3 C
4 D
5 E
6 F
预期产出:
FromUser ToUser
A B
B F
C B
E C
答案 0 :(得分:0)
以下是使用JOIN
条件<{1}}的一个技巧
IN
或者你需要加入SELECT Max(CASE WHEN FromID = u.UserID THEN Username END),
Max(CASE WHEN ToID = u.UserID THEN Username END)
FROM users u
JOIN gift g
ON u.UserID IN ( g.FromID, g.ToID )
GROUP BY FromID,
ToID
表两次
users
答案 1 :(得分:0)
看起来你需要回顾一下如何处理同一个两个表之间的几个关系。
你的礼物表有一种关系,描述了谁送了礼物 - 我称之为送礼者;以及描述谁收到礼物的关系 - 我在这里称之为接收者。来自礼物的两种关系都是多对一的用户表。
您只需加入同一个表两次,并为该表提供一个良好的相关名称 - 我的示例中的给予者和接收者 - 在代码中显示您正在使用它们的内容。
像这样:
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