2013-04-17 151 views
1

任何人都可以幫助,MySQL超越我我想!MySQL加入奇怪的結果

我有以下表格:

  • 比賽
  • 競爭

比賽擁有兩個團隊和相應的之間的競爭遊戲的細節。

我想查詢所有遊戲數據庫/對於給定的比賽賽程,我想回:

  • 球隊的名字
  • 團隊ID
  • 隊的比賽中

這是我的查詢:

SELECT 
    matches.match_id, 
    teamsh.team_name AS "homeTeam", 
    teamsa.team_name AS "awayTeam", 
    competition.competition_id, 
    competition.name 
FROM 
    matches, teams teamsh, teams teamsa, competition 
WHERE 
    matches.home_team_id = teamsh.team_id 
AND matches.away_team_id = teamsa.team_id 
AND matches.competition_id=2 

由於某種原因,這個查詢返回所有正確的比賽2,但它也返回夾具的行,但作爲競爭1也。我不明白爲什麼,因爲我有條款:

AND matches.competition_id=2 

什麼我做錯了,我檢查了數據庫和比賽是爲每個燈具正確保存。

謝謝。

回答

3

你還沒有明確地鏈接到競爭表格(所以它的執行笛卡爾聯接) - 嘗試添加:

and matches.competition_id = competition.competition_id 

- 到您的查詢的末尾。

雖然,我會建議重寫使用顯式查詢聯接語法 - 像這樣:

SELECT m.match_id, 
     h.team_name AS "homeTeam", 
     a.team_name AS "awayTeam", 
     c.competition_id, 
     c.name 
FROM matches m 
JOIN teams h ON m.home_team_id = h.team_id 
JOIN teams a ON m.away_team_id = a.team_id 
JOIN competition c ON m.competition_id = c.competition_id 
WHERE m.competition_id=2 
+0

+1給予正確的聯接語法。 –

+0

Thnaks工作完美。笛卡爾加入是一個術語,自從我回到大學後的10年來我一直沒有聽說過,我需要回去閱讀這些東西。 –

1

您忘記了競賽和比賽表之間的條件JOIN

WHERE 
    matches.home_team_id = teamsh.team_id 
    AND matches.away_team_id = teamsa.team_id 
    AND matches.competition_id = competition.competition_id 
    AND matches.competition_id=2