3

我有一个表,它有两列,每列都包含一个成员 ID,该成员 ID 是包含其名称的成员表的外键。我想选择第一个带有名称而不是成员 ID 的表。我不确定这样做的方法。我觉得肯定有一种涉及 INNER JOIN 的方法,但我想不出如何在一个 INNER JOIN 中从一个表中选择两个名称。有任何想法吗?

提前致谢!

匹配表

|------|-------|
| user | match |
|------|-------|
| 1    | 4     |
| 2    | 1     |
| 3    | 2     |
|------|-------|

成员表

|------|-------|
| user | name  |
|------|-------|
| 1    | Joe   |
| 2    | Kyle  |
| 3    | John  |
| 4    | Nate  |
|------|-------|

期望的输出

|------|-------|
| user | match |
|------|-------|
| Joe  | Nate  |
| Kyle | Joe   |
| John | Kyle  |
|------|-------|
4

3 回答 3

4

您应该加入会员表两次。

SELECT M1.NAME , M2.NAME
FROM MEMBERS M1
INNER JOIN MATCH M
   ON M1.USER = M.USER
INNER JOIN MEMBERS M2
   ON M2.USER = M.MATCH

如果您的数据库是 mysql,请注意低位和高位标识符。

于 2012-10-11T22:22:33.303 回答
2

您也可以使用外部应用执行此操作:http ://sqlfiddle.com/#!3/8f932/5

SELECT me.name as 'User',
  mem.name as 'Match'
FROM Match m
OUTER APPLY(
  SELECT me.name
  FROM Members me
  WHERE me.id = m.match
)mem
LEFT JOIN Members me on me.id = m.id

或:http ://sqlfiddle.com/#!3/8f932/6

SELECT me.name as 'User',
  mem.name as 'Match'
FROM Match m
LEFT JOIN Members mem on mem.id = m.match
LEFT JOIN Members me on me.id = m.id
于 2012-10-11T22:43:33.267 回答
0

你可以做两个连接:

SELECT u1.name, u2.name
FROM members u1
INNER JOIN match m
ON u1.user = m.user
INNER JOIN members u2
ON u2.user = m.match
于 2012-10-11T22:23:50.837 回答