语法错误:“)”在此位置无效,需要 EOF ,';'

Posted

技术标签:

【中文标题】语法错误:“)”在此位置无效,需要 EOF ,\';\'【英文标题】:Error in syntax: ")" is not valid at this position, expecting EOF , ';'语法错误:“)”在此位置无效,需要 EOF ,';' 【发布时间】:2022-01-04 23:48:57 【问题描述】:

我必须编写一个查询来将标题 1001 的价格更改为最近出版的图书的价格。

我写了以下查询

update titles 
set price = (Select Top 1 price from titles Group by price order by Max(pubDate))
where titleID = 1001

错误说在select top 1子查询的末尾需要一个':'在括号的末尾

但是,如果我从子查询中删除“前 1”部分,它会告诉我另一个错误,即我无法在 FROM 子句中指定目标表“标题”进行更新

有人知道怎么回事吗?

【问题讨论】:

你使用mysql还是mssql。该查询似乎是 MSSQL (TOP 1) 。请标记正确的 RDBMS 【参考方案1】:

MySQL 使用LIMIT,而不是TOP(后者是 SQL Server 或 Access 语法)。即使解决了这个问题,您的更新仍然会出现语法问题。我会将您的问题表达为加入:

UPDATE titles t1
INNER JOIN
(
    SELECT price, MAX(pubDate) AS maxPubDate
    FROM titles
    GROUP BY price
) t2
    ON t2.price = t1.price
INNER JOIN titles t3
    ON t3.price = t2.price AND
       t3.pubDate = t2.maxPubDate
SET
    t1.price = t3.price
WHERE
    t1.titleID = 1001;

简单地说,上面的查询表示将具有相同价格的每组记录的price更新为最近发布的记录的值。

【讨论】:

以上是关于语法错误:“)”在此位置无效,需要 EOF ,';'的主要内容,如果未能解决你的问题,请参考以下文章

“from”在此位置无效,期待:EOF,“;” [复制]

“in”在此位置无效[重复]

“分隔符”在此位置无效,需要 CREATE

SQL 编译错误:位置 157 的语法错误第 5 行意外'<EOF>'

通过 JTDS 驱动程序执行 SQL Server 调用时出现“第 24 行位置的 JDBC 转义语法无效 '=' 预期字符”错误的原因?

语法错误:反引号替换中的 EOF