2017-04-21 50 views
0

その値をIDに置き換える:は、MySQL、3つのテーブルを結合し、私が使用する3つのテーブルを持っている

event Table 

id | round | nameA | nameB | place 
-- | ----- | ----- | ----- | ----- 
1 | 1  | 1  | 3  | 1 
2 | 1  | 2  | 4  | 2 

name Table 

id | name | shortName | place 
-- | ---- | --------- | ----- 
1 | A | a   | 1 
2 | B | b   | 2 
3 | C | c   | 3 
4 | D | d   | 4 

place Table 

id | name 
-- | --- 
1 | p1 
2 | p2 
3 | p3 
4 | p4 

イベントテーブルには、私が欲しいものに近いですが、彼らは代わりにIDSで満たされています。

nameA.shortName | nameB.shortName | place.name 
--------------- | --------------- | ---------- 
a    | c    | p1 
b    | d    | p2 

これまでのところ、私はnameA

ために、その名前と短い名前で
SELECT n.shortName, e.nameB, p.name 
FROM event e 
    INNER JOIN name n 
    ON n.id = e.nameA 
    INNER JOIN place p 
    ON e.place = g.id 
を場所IDを置き換える行うために管理:私はこのようなnameA、nameB両方のための短縮名だけでなく、完全な地名でIDを交換したいです

しかしnameBは、私が参加し、サブクエリ推測そのIDにまだ

nameA.shortName | nameB.id  | place.id 
--------------- | --------------- | ---------- 
a    | 3    | p1 
c    | 4    | p2 

です。私はショートネームと場所の名前を取得する方法を知っていますが、どのようにメインのクエリにそれらを統合しますか?

SELECT n.shortName 
    FROM name n 
    JOIN event e 
    ON n.id = e.nameB 
+2

二回名前テーブルに参加。 (表のエイリアスがあります(例:n1とn2)。 – jarlh

答えて

1

あなたがの値にしたいフィールドごとに一度名前のテーブルに対してテーブルに参加: -

SELECT n1.shortName, 
     n2.shortName, 
     p.name 
FROM event e 
INNER JOIN name n1 ON n1.id = e.nameA 
INNER JOIN name n2 ON n2.id = e.nameB 
INNER JOIN place p ON e.place = g.id 
関連する問題