【问题标题】:Wrong SQLServer syntax错误的 SQLServer 语法
【发布时间】:2011-02-03 23:20:08
【问题描述】:

这就是我想要实现的目标:

涉及4张表:

  • 以 PlayerID 为 PK 的玩家,
  • 以 CompetID 为 PK 的比赛
  • ResultID 为 PK 和 CompetID 为 FK 的结果

还有第四张表:我创建​​的新列是 ResultID + PlayerID 作为 PK 和 CompetID 作为新列的 PlayerResultts。

比赛、结果和 PlayerResults已经被填充并且相当大(目前有 300000 个 PlayerResults)。

为了填充 PlayerResults.CompetID 列,我尝试了 Update ... (Select....) 请求,但我不知道正确的语法并且它失败了。

这是我微弱的尝试:

update PlayerResults
set competid = (select distinct(r.competid) from results r, playerresults p  
where r.resultID = p.resultid)

错误是(当然):

“消息 512,第 16 级,状态 1,第 1 行 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。"

有人能把我引向正确的方向吗? TIA

【问题讨论】:

  • 您需要接受更多答案。
  • 再次评论接受答案!我接受有用的答案,没问题。我不接受任何只是为了取悦别人,对不起......

标签: sql sql-server syntax sql-update


【解决方案1】:

你不需要独特的

update PlayerResults
set competid = r.competid
from results r
where r.resultID = PlayerResults.resultid

【讨论】:

  • @user512602 请注意您的问题是:您的原始查询定义了表正在更新中的列与子查询中的列之间没有关联,因此您有效地采取了whole set 并尝试将其分配给列。请注意cyberwiki 如何将正在更新的表实例与results 关联起来。
  • 伙计,这太棒了!答案如此之快...... StackOverflow 是解决方案的明确来源。
  • 我没有发现 25% 的低利率!费率水平取决于找到有价值的答案,而在这里——有时——我在几分钟内就得到了答案,这很棒。话虽如此,我真的很惊讶你们这些极客如此渴望接受和投票!好像它们是美元甚至更好,欧元......
猜你喜欢
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多