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