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);
我有一个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);