【问题标题】:Incorrect syntax near 'LIMIT' using mssql使用 mssql 的“LIMIT”附近的语法不正确
【发布时间】:2015-07-29 15:11:37
【问题描述】:

我正在尝试从数据库中检索一些数据,这些数据需要是得分最高的前 10 名代理。

我的查询:

SELECT AgentScores.agentID, 
       AgentScores.totalScore, 
       Agents.firstname, 
       Agents.lastname 
FROM AgentScores 
INNER JOIN Agents ON AgentScores.AgentId=Agents.Agent_id 
ORDER BY AgentScores.totalScore DESC 
LIMIT 10

内部连接正在工作。我找到了SELECT TOP 10 sql 语句,但是.. 我想要得分最高的 10 个代理,而不是前 10 个 id。正如你所看到的,我在总分上排序。

有人知道如何解决这个问题吗?

错误:Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near 'LIMIT'. [message] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near 'LIMIT'. ) )

谢谢!

【问题讨论】:

  • "I want the 10 agents with the highest score and not the first 10 id's" - 这就是您的 ORDER BY 子句的用途。您没有按 ID 值排序,那为什么要根据这些值进行限制?

标签: php sql-server


【解决方案1】:

你必须使用 TOP 子句而不是 LIMIT

SELECT TOP 10 AgentScores.agentID, AgentScores.totalScore, Agents.firstname, Agents.lastname FROM AgentScores INNER JOIN Agents ON AgentScores.AgentId=Agents.Agent_id ORDER BY AgentScores.totalScore DESC

【讨论】:

  • 但是为什么会这样呢?
【解决方案2】:

为了限制 MSSQL 中的行,您必须使用 SELECT TOP 10 .... 而不是 LIMIT 10(限制是 MySQL 子句,而不是 MSSQL)

【讨论】:

  • @drmavelous 但是.. 它不只是抓取数据库中的前 10 个 id 吗?比如,如果我有 100 个代理,并且 id 87 得分最高,那不就是只订购前 10 个 id 的吗?
  • 否,因为它将从 ORDER BY 子句中读取并选择匹配的前 10 个
  • 不,您保持 order by 子句不变,因此它将根据 order by 子句中指定的顺序返回前 10 条记录。
  • “在 SELECT 语句中,始终将 ORDER BY 子句与 TOP 子句一起使用。这是可预测地指示哪些行受 TOP 影响的唯一方法。” source
猜你喜欢
  • 2021-09-26
  • 2019-12-30
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 2013-12-16
  • 1970-01-01
相关资源
最近更新 更多