Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何仅更换表中最昂贵的产品之一?_Sql_Sql Server - Fatal编程技术网

Sql 如何仅更换表中最昂贵的产品之一?

Sql 如何仅更换表中最昂贵的产品之一?,sql,sql-server,Sql,Sql Server,我有这个: UPDATE TOP (1) dbo.Products SET UnitPrice = UnitPrice - 10 ORDER BY UnitPrice DESC 这个错误是: 关键字顺序附近的语法不正确 如果您使用的是MySQL,请删除TOP(1) 如果有一个以上的产品具有最高的价格,top将无法满足此目的。改用公共表表达式。它将更新所有具有最高价格的产品 with cte as ( select * ,row_number()over(order by UnitPrice d

我有这个:

UPDATE TOP (1) dbo.Products
SET UnitPrice = UnitPrice - 10
ORDER BY UnitPrice DESC
这个错误是:

关键字
顺序
附近的语法不正确


如果您使用的是MySQL,请删除
TOP(1)


如果有一个以上的产品具有最高的价格,top将无法满足此目的。改用公共表表达式。它将更新所有具有最高价格的产品

with cte as (
select * ,row_number()over(order by UnitPrice desc)ROWNUMBER from products
)
update cte set UnitPrice = UnitPrice -10
WHERE ROWNUMBER=1
如果您想使用top执行此操作,请使用子查询。(您无法在尝试更新时使用order by)


您可以将子查询与
TOP
一起使用:

UPDATE p
    SET UnitPrice = UnitPrice - 10
    FROM (SELECT TOP (1) p.*
          FROM dbo.Products p
          ORDER BY UnitPrice DESC
         ) p

你确定你在使用MySQL吗?(这看起来更像MS SQL Server语法。)如果有2个(或更多)产品,价格相同,预期结果是什么。对不起,我是新手。你是对的,这是MS SQL Server。我没有想到如果有两种(或更多)产品,价格相同会发生什么。我的假设是只有一种产品。顺便说一句,它的Northwind数据库。欢迎来到Stack Overflow。您最好提供示例数据和预期结果。限制不适用于SQL Server。同样的错误。”“限制”不起作用,这就是我使用“顶部(1)”的原因,谢谢。你能告诉我为什么我的查询不起作用吗?(假设只有一种产品的价格最高。)不能直接使用order by with update语句。SQL Server不支持该功能。@BlvckCodeGuy欢迎使用stackoverflow!
UPDATE dbo.Products
SET UnitPrice = UnitPrice - 10
where unitprice in (select top 1 unitprice from  dbo.Products ORDER BY UnitPrice DESC)
UPDATE p
    SET UnitPrice = UnitPrice - 10
    FROM (SELECT TOP (1) p.*
          FROM dbo.Products p
          ORDER BY UnitPrice DESC
         ) p