2014-02-15 125 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结果等