【问题标题】: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

标签: mysql sql mysql-workbench


【解决方案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更新为最近发布的记录的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 2020-07-06
    • 2019-12-06
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多