【问题标题】:Syntax error in SQL subquerySQL 子查询中的语法错误
【发布时间】:2012-08-29 05:22:26
【问题描述】:

我遇到语法错误,谁能告诉我为什么?

SELECT  c.clientid, c.clientname, c.billingdate, 
      (SELECT TOP 1 previousbalance FROM invoice i 
          WHERE i.client = c.clientid ORDER BY i.invoiceid DESC) AS remaining 
FROM client c 
ORDER BY clientname

辅助选择正在做的是在发票表中获取该 clientid 的最新记录。

程序 - HediSQl

SQL

这是错误:

SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“1 previousbalance FROM invoice i WHERE i.client = c.clientid ORDER BY i.invoicei”附近使用正确的语法 */

【问题讨论】:

  • 请在此处显示语法错误。以及哪个 SQL(MySQL、SQL Server 等)?
  • HediSQL 是程序,SQL 这里是错误SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1 previousbalance FROM invoice i WHERE i.client = c.clientid ORDER BY i.invoicei' at line 1 */

标签: mysql syntax


【解决方案1】:

只是猜测,但它可能表明您应该将 TOP 1 替换为 LIMIT 1WHERE ROWNUM < 2 LIMIT 1。你用的是什么类型的数据库?

【讨论】:

  • 这不起作用? SELECT c.clientid, c.clientname, c.billingdate, (SELECT previousbalance FROM invoice i WHERE i.client = c.clientid ORDER BY i.invoiceid DESC LIMIT 1) AS remaining FROM client c ORDER BY clientname
  • 这也应该有效:SELECT c.clientid, c.clientname, c.billingdate, remaining.previousbalance FROM client c LEFT JOIN (SELECT i.client, previousbalance FROM invoice i GROUP BY i.client HAVING MAX(invoiceid)) remaining ON c.clientid = remaining.client ORDER BY c.clientname。我还设置了一个 SQLFiddle:sqlfiddle.com/#!2/29e80/10
【解决方案2】:

您只需要像这样使用LIMIT 而不是TOP

SELECT  c.clientid, c.clientname, c.billingdate, 
   (SELECT previousbalance FROM invoice i 
     WHERE i.client = c.clientid ORDER BY i.invoiceid DESC LIMIT 1) AS remaining 
FROM client c 
ORDER BY clientname

See this SQLFiddle

【讨论】:

    【解决方案3】:

    您拥有的语法可以在 SQL Server 中使用。您的错误消息来自 MySQL。

    试试这个:

    SELECT c.clientid, 
           c.clientname, 
           c.billingdate, 
           (
           SELECT previousbalance 
           FROM invoice i 
           WHERE i.client = c.clientid 
           ORDER BY i.invoiceid DESC
           LIMIT 1  
           ) AS remaining 
    FROM client c 
    ORDER BY clientname
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多