2011-08-03 41 views
1

我有一個查詢,我發現Sopocosy體育飼料文檔。我已經改變這個查詢來滿足我的需要。這裏是我的查詢需要幫助寫在SQL查詢

SELECT 
     e.id as eid, 
     ts.name AS stage_name, 
     DATE_FORMAT(e.startdate, '%d.%m.%Y') AS startdate, 
     DATE_FORMAT(e.startdate, '%H:%i') AS starttime, 
     MIN(IF(ep.number = 1, p.name, NULL)) AS home_team, 
     IF(e.status_type = 'notstarted', '-',(MIN(IF(ep.number = 1, r.value, NULL)))) AS home_score, 
     IF(e.status_type = 'notstarted', '-',(MIN(IF(ep.number = 2, r.value, NULL)))) AS away_score, 
     MIN(IF(ep.number = 2, p.name, NULL)) AS away_team, 
     es.name AS status_text 
FROM 
     tournament_template AS tt INNER JOIN 
     tournament AS t ON t.tournament_templateFK = tt.id INNER JOIN 
     tournament_stage AS ts ON t.id = ts.tournamentFK INNER JOIN 
     event AS e ON ts.id = e.tournament_stageFK INNER JOIN 
     event_participants AS ep ON e.id = ep.eventFK LEFT JOIN 
     status_desc AS es ON e.status_descFK = es.id LEFT JOIN 
     participant AS p ON ep.participantFK = p.id LEFT JOIN 
     result AS r ON ep.id = r.event_participantsFK AND r.result_code = 'runningscore' LEFT JOIN 
     property AS prop ON e.id = prop.objectFK AND prop.object ='event' AND prop.name = 'Live' 
WHERE 
     tt.sportFK = '1' 
GROUP BY 
     e.id 
ORDER BY 
     ts.id, e.startdate, e.id 

現在的問題是 我可以使用HOME_TEAM和AWAY_TEAM where子句。如果是,那麼如何。就像理論上我希望在where子句中這樣。

WHERE home_team ='Navibank Saigon'OR away_team ='Navibank Saigon';

但它給未知的列錯誤。

請幫助

回答

1

貌似p.name是正在返回什麼爲home_team這樣會讓你的WHERE條款像

WHERE p.name = 'Navibank Saigon'

+0

呀,問題是p.name包含名稱都主場還是客場。所以如果我把p.name ='Navibank Saigon'然後離開列返回NULL – Erik

0

爲什麼你不能使用WHERE home_team = 'Navibank Saigon' OR away_team = 'Navibank Saigon'的原因是真正的列名您在執行搜索查詢後,在結果集上分配這些'列名'(別名)。 WHERE語句是搜索查詢的一部分,需要實際的列名稱,在本例中爲p.name。另一方面,ORDER BY語句在結果集上執行,因此可以使用像'home_team'這樣的列別名。

對於查詢部分:您在GROUP BY語句中使用聚合函數(MIN)中的兩個團隊。在GROUP BY語句上進行過濾必須使用HAVING而不是WHERE來完成。

這個結果:

GROUP BY 
    e.id 
HAVING 
    MIN(IF(ep.number = 1, p.name, NULL)) = 'Navibank Saigon' 
     OR MIN(IF(ep.number = 1, p.name, NULL)) = 'Navibank Saigon'