2010-04-25 139 views
1

我有以下表:MySQL的加入問題

--table sportactivity-- 

sport_activity_id, home_team_fk, away_team_fk, competition_id_fk, date, time 

(例如元組) - > 1,33,41,如圖5所示,2010-04-14,5時40分○○秒

--table teams-- 

team_id, team_name 

(元組的例子) - > 1,阿爾及利亞

現在我有用於提取球隊A對B隊

SELECT sport_activity_id, T1.team_name AS TeamA, T2.team_name AS TeamB, DATE_FORMAT(DATE, '%d/%m/%Y') AS DATE, DATE_FORMAT(TIME, '%H:%i') AS TIME 

FROM sportactivity 

JOIN teams T1 ON home_team_fk = T1.team_id 

JOIN teams T2 ON (away_team_fk = T2.team_id 

OR away_team_fk = '0') 

WHERE DATE(DATE) >= CURDATE() 

ORDER BY DATE(DATE) 
以下SQL statment 210

我的問題是,當B隊是空的,我有無關的信息....它似乎是它返回所有的組合。我需要一個查詢,當B隊等於0時(這可以發生在我的場景中)我只得到隊A - 隊B(作爲0)一次。

回答

3

使用LEFT OUTER JOIN而不是INNER JOIN。也就是說,改變此:

JOIN teams T2 ON (away_team_fk = T2.team_id OR away_team_fk = '0') 

這樣:

LEFT JOIN teams T2 ON away_team_fk = T2.team_id 

這應該在away_team_fk = 0(假定沒有這樣的行存在)的情況下在T2返回空值的列。

+0

這個工作!謝謝 – mouthpiec 2010-04-25 17:04:30

0

您是否嘗試過使用DISTINCT關鍵字?

SELECT DISTINCT sport_activity_id, T1.team_name AS TeamA, T2.team_name AS TeamB, DATE_FORMAT(DATE, '%d/%m/%Y') AS DATE, DATE_FORMAT(TIME, '%H:%i') AS TIME 

FROM sportactivity 

JOIN teams T1 ON home_team_fk = T1.team_id 

JOIN teams T2 ON (away_team_fk = T2.team_id 

OR away_team_fk = '0') 

WHERE DATE(DATE) >= CURDATE() 

ORDER BY DATE(DATE) 

這將確保如果一行重複,所有數據相同,它只顯示一次。

一樣,如果你有

1 abc abc 10/22/10 12:00:00 
1 abc abc 10/22/10 12:00:00 
2 abc dcb 10/22/10 12:00:00 

你將不得不

1 abc abc 10/22/10 12:00:00 
2 abc dcb 10/22/10 12:00:00 

返回,而不是