2016-02-02 105 views
1

我嘗試使用下面的SQL命令一起加入3個表:SQL innerjoin 3臺不同的主鍵

SELECT 
    tg.Kickoff, 
    tg.League, 
    tg.home, 
    tg.away, 
    ln.Full, 
    ln.Mysite, 
    ln.Country, 
    tl.mydb 
    FROM `todaysgames` AS tg 
INNER JOIN `leaguenames` AS ln ON tg.League = ln.Othersites 
INNER JOIN `teamlookup` AS tl ON tg.home = tl.websitedb 
           OR tg.away = tl.websitedb; 

問題是我得到的是雙打的每一行。

我正在尋找的是每個tg.home和tg.away都將它替換爲tl.websitedb(這基本上是修改名稱)。

會這樣嗎? (下面是電流輸出)

enter image description here

這裏所需的輸出enter image description here

+0

談到主鍵,*什麼是*表主鍵? 'Othersites'是'leaguenames'的唯一關鍵嗎? 'websitedb'是'teamlookup'唯一的關鍵嗎? –

+0

這是正確的Thorsten - 我已更新表格的圖像,以幫助 –

回答

2

如果我interprete你的問題正確,你得到兩條記錄的每場比賽,你只需要一個?這是因爲你在兩個條件下加入團隊查找,從而每場比賽找到兩個記錄。

實施例:

todaysgames

 
Game Home Away 
1  A  B 

teamlookup

 
websitedb mydb 
A   DBA 
B   DBB 

結果

 
Game Home Away mydb 
1  A  B  DBA 
1  A  B  DBB 

我猜你真的想要得到這個代替:

 
Game Home Away mydbHome mydbAway 
1  A  B  DBA  DBB 

查詢:

SELECT 
    tg.Kickoff, 
    tg.League, 
    tg.home, 
    tg.away, 
    ln.Full, 
    ln.Mysite, 
    ln.Country, 
    tlh.mydb as mydb_home, 
    tla.mydb as mydb_away 
FROM todaysgames tg 
JOIN leaguenames ln ON tg.League = ln.Othersites 
JOIN teamlookup tlh ON tg.home = tlh.websitedb 
JOIN teamlookup tla ON tg.away = tla.websitedb; 
+0

@sagi:因爲表中沒有記錄,其中websitedb等於* *'home' *和*'away'(除了'home' ='離開'這沒什麼意義)。 –

+0

完美 - 第一次做連接。感謝您的幫助和解釋 –