2017-04-21 85 views
0

我有三個表使用替代ID:MySQL的加入三個表,其價值

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來代替。我想,以取代簡短名字IDS兩個NAMEA,nameB以及完整的地名是這樣的:

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

到目前爲止,我設法做它的名稱和短名稱替代地方ID爲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 

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