2013-05-17 172 views
0

我想在Oracle表更新列,以便为每个GameGoals列接收平均目标从goal_scored得分的球员表,但我不断收到以下错误信息:更新SQL属性

"Error: ORA-01427: single-row subquery returns more than one row"

我测试了这个查询,它返回了10行,与Games一样多,结果也是正确的。

这是我的代码:

UPDATE GEN 
    SET Goals = (Select AVG(goal_scored) FROM Player, Gen, Game 
    WHERE Game.Name=Gen.Gameid AND Player.Gameid=Game.Name 
    GROUP BY Player.Gamename); 

如果我跳过GROUP BY我不明白的错误,但所有Game小号获得相同的平均分数。

+1

我看到了一种跨在你的嵌套查询的加入,在这里:'从玩家,艮,Game' – danihp

+0

子查询后'设定目标='有一个返回值只有一行。你的问题没有解释如何计算平均值 - 是否由玩家选择?如果不是,什么?你可以展示你的餐桌结构吗? –

+1

你不需要一个Group By在您选择了一个汇聚的查询。值。汇聚。函数返回一个值,而不是多个值。您选择的结果将是单个行 - 无需分组。如果不是,那么这是一个错误的查询。 – Art

回答

2

跳过在子选择Gen(但保持了where子句中):

UPDATE GEN 
    SET Goals = (Select AVG(goal_scored) FROM Player, Game 
    WHERE Game.Name=Gen.Gameid AND Player.Gameid=Game.Name); 

这解决了你的语法错误,但我有一种感觉,这不是你想要的。 请参阅Ed Gibbs的问题评论。

+0

是的,它做到了现在的工作,非常感谢。 – Addi