SQL 更新语句未更新所有预期的行

SQL update statement not updating all expected row

我有一个select语句来抓取所有产品

SELECT *  
FROM Products AS P
INNER JOIN Suppliers AS S ON S.product_id = P.product_id 

这returns 560 行。但是当我尝试更新所有这些行时,它说更新了 225 行而不是 560 行:

UPDATE P
SET P.hasSupplier = 1
FROM Products AS P
INNER JOIN Suppliers AS S ON S.product_id = P.product_id 

我做错了什么?

您的原始查询包含拥有不止一种产品的供应商。在第二个查询中只更新了这些行中的一个。

你可以运行:

select count(*), count(distinct productid)
from suppliers;

看看区别。

我建议使用 exists 作为 update:

UPDATE P
    SET P.hasSupplier = 1
    FROM Products P
    WHERE EXISTS (SELECT 1 FROM Suppliers S WHERE S.product_id = P.product_id);