内部加入两列

时间:2017-01-29 12:06:45

标签: mysql sql select inner-join

我想做一个选择,从同一个表中的两列中查找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

2 个答案:

答案 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