2013-04-16 42 views
0

我想執行一個簡單的MySQL的加入:MySQL的簡單連接

我有matches其特點,我想加入的兩個字段的表:team1team2

我想找到存儲在該teams檯球隊相應名稱:

SELECT teams.team_name AS "name1", teams.team_name AS "name2", matches.id 
FROM teams, matches 
WHERE matches.id=1 
AND matches.team1_id=teams.team_id 
AND matches.team2_id=teams.team_id 

如果我刪除最後和條件,我得到一個結果,但無論如果我包括我得到一個空集?

我在做什麼錯?

+0

由於我們不知道數據怎麼可能,我們對此有何評論? –

回答

2

對於您希望在查詢中唯一引用的每個團隊,您需要一個單獨的別名,否則SQL將比較同一行。

SELECT team1.team_name AS "name1", team2.team_name AS "name2", matches.id 
FROM teams team1, teams team2, matches 
WHERE matches.id=1 
AND matches.team1_id=team1.team_id 
AND matches.team2_id=team2.team_id 

在這裏,我們現在有兩個team1和team2的團隊表別名,因此他們可以分別引用不同的行。

+0

非常感謝....太簡單了 –

2

你需要加入teams兩次表matches,因爲兩列都依賴於它,

SELECT a.*,    -- <<== select column that you want to project 
     b.team_name AS Team1Name, 
     c.Team_name AS Team2Name 
FROM matches a 
     INNER JOIN teams b 
      ON a.team1_ID = b.team_ID 
     INNER JOIN teams c 
      ON a.team2_ID = c.team_ID 
-- WHERE a.id = 1 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

+0

出於好奇,爲什麼要加上'a。*'? – Jon

+0

@Jon它只是選擇所有列。 –

+0

到OP,這是'ANSI SQL-92'。 –

0

您的查詢原樣是隻會返回小組播放的記錄反對自己(當然從未發生過)。你希望兩個不同的加入對球隊,所以它的兩個實例:

select 
    teams1.team_name as "name1" 
    ,teams2.team_name as "name2" 
from 
    matches 
join 
    teams teams1 on matches.team1_id = teams1.team_id 
join 
    teams teams2 on matches.team2_id = teams2.team_id 
where 
    matches.id = 1 
0

試試這個:

SELECT team1.team_name AS "name1", team2.team_name AS "name2", matches.id 
FROM teams as team1, teams as team2, matches 
WHERE matches.id=1 
AND matches.team1_id=team1.team_id 
AND matches.team2_id=team2.team_id