SQL Server - 更新时使用内连接(inner join)

437

我有一个下面的查询,但它不起作用。我做错了什么?这个可能吗?

UPDATE ProductReviews AS R 
   INNER JOIN products AS P 
       ON R.pid = P.id 
SET R.status = '0' 
WHERE R.id = '17190' 
  AND P.shopkeeper = '89137'

UPDATE dbo.ProductReviews AS R SET R.status = '0' INNER JOIN dbo.products AS P ON R.pid = P.id WHERE R.id = '17190' AND P.shopkeeper = '89137'; - Hassan
2
这不是重复项,因为他并非试图从另一个表更新一个表。他只是加入以强制执行where子句。 - nuander
2个回答

921
UPDATE R 
SET R.status = '0' 
FROM dbo.ProductReviews AS R
INNER JOIN dbo.products AS P 
       ON R.pid = P.id 
WHERE R.id = '17190' 
  AND P.shopkeeper = '89137';

请问您能否解释一下为什么 UPDATE JOIN SET WHERE 这样的语法是不正确的,但是 UDPATE SET FROM JOIN WHERE 却可以工作吗?这是否取决于 MySQL 的版本? - Farside
14
@Farside 这个语法是针对SQL Server的。其他人将不得不帮助你使用MySQL语法,很抱歉。 - Aaron Bertrand

75
这应该就可以了:
UPDATE ProductReviews
SET    ProductReviews.status = '0'
FROM   ProductReviews
       INNER JOIN products
         ON ProductReviews.pid = products.id
WHERE  ProductReviews.id = '17190'
       AND products.shopkeeper = '89137'

6
在PostgreSQL中,出现“ERROR:table name 'ProductReviews' specified more than once”错误。 - Johhan Santana
1
通过将 FROM ProductReviews AS prSET status = '0' 替换为 ProductReviews.status = '0',已经修复了它。 - Johhan Santana
10
这个问题被标记为 SQL Server - 不能保证在其他数据库管理系统上能够正常工作。 - Bridge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接