2014-02-15 126 views
-1

我正在爲我的實習練習,並且我也在一些棒球中混合使用。工作在一個視圖,會給我像平均和obp的東西。我收到一個錯誤,有人能告訴我我的語法有什麼問題嗎?在MySQL中使用內部連接和多個選擇條件創建視圖

CREATE VIEW `Master Batter 2009 - 2013` AS 
select (select * from baseball.batting), 
(select Sum(H)/Sum(AB) from baseball.batting) as 'Average', 
(select (Sum(H)+Sum(BB)+Sum(HBP))/(Sum(AB)+Sum(BB)+Sum(HBP)+Sum(SF))) as 'OBP', 
join baseball.master 
on baseball.master.playerID = baseball.batting.playerID 
where yearID = '2013' 
Group By playerID 
+2

請勿在本時尚名稱中列出您的表格。它會驅動你瘋狂 – Strawberry

+0

讓我們來看看。 。 。你沒有'from'從句,還有其他許多句法問題。 –

+0

修復了這個問題。還有什麼錯誤? –

回答

2

這有一個是錯的幾件事情的清單(一些語法無效的,有的只是違反最佳實踐。)

  • 使用標識符(如視圖名稱)包含空格,破折號和/或其他特殊字符在語法上是有效的,但這些都太有問題的有用

  • 查詢有沒有FROM子句(該JOIN關鍵字出現,我們期待一個FROM關鍵字)

  • 以下SELECT列表的最後一個項目額外的逗號

  • ON子句唯一有效以下JOIN,這需要在ON子句參考無效的標識符的先前FROM

  • 謂詞,baseball.batting不是有效的引用表,視圖或行源別名(在查詢的FROM子句中引用)

  • SELECT列表中的第一項可以是b E中的子查詢,但是子查詢可以返回至多一列,並返回至多一行

  • 引用HABplayer_id都是不合格的;最好的做法是限定所有列引用

  • 標識符和別名應包含在反引號,不是單引號


我建議你開發和測試查詢您CREATE VIEW序言前

缺席表定義(哪些列在哪個表中),幾乎不可能破譯你想要完成的事情。

我想你想是這樣的:

SELECT m.player_id   AS `player_id` 
    , SUM(b.H)/SUM(b.AB) AS `Average` 
    , (SUM(b.H)+SUM(b.BB)+SUM(b.HBP))/(SUM(b.AB)+SUM(b.BB)+SUM(b.HBP)+SUM(b.SF))) AS `OBP` 
    FROM baseball.master m 
    LEFT 
    JOIN baseball.batting b 
    ON b.player_id = m.player_id 
    AND b.yearID = 2013  
GROUP BY m.playerID 

注意,有一些邊緣情況下,您可能要處理......除以零,除了在NULL NULL結果等