3

名前を含むmembersテーブルへの外部キーであるメンバーIDをそれぞれ含む2つの列を持つテーブルがあります。メンバーIDの代わりに名前を持つ最初のテーブルを選択したい。これを行う方法がわかりません。確かにINNERJOINを使用する方法があるように感じますが、1つのINNERJOINの1つのテーブルから2つの名前を選択する方法を考えることはできません。何か案は?

前もって感謝します!

マッチテーブル

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

メンバーテーブルに2回参加する必要があります。

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

2つの結合を行うことができます。

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 に答える