【问题标题】:SQL Server - inner join when updating [duplicate]SQL Server - 更新时的内部联接[重复]
【发布时间】:2012-03-24 05:02:45
【问题描述】:

我有以下不工作的查询。我究竟做错了什么?这甚至可能吗?

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';
  • 这不是重复的,因为他没有尝试从另一个表更新一个表。他只是加入执行 where 子句。

标签: sql-server inner-join


【解决方案1】:

应该这样做:

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

【讨论】:

  • 这在 postgresql 中给了我ERROR: table name "ProductReviews" specified more than once
  • 通过FROM ProductReviews AS pr 也修复了它SET status = '0' 而不是ProductReviews.status = '0'
  • @JohhanSantana 这个问题被标记为 SQL 服务器 - 不保证它会在其他 DBMS 系统上工作。
【解决方案2】:
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 此语法适用于 SQL Server。其他人将不得不帮助您使用 MySQL 语法,抱歉。
猜你喜欢
  • 2011-03-28
  • 2011-12-23
  • 2012-10-04
  • 2014-06-09
  • 1970-01-01
  • 2012-01-28
  • 2015-07-24
  • 2019-06-25
  • 2017-01-01
相关资源
最近更新 更多