【问题标题】:SQL update statement not updating all expected rowSQL 更新语句未更新所有预期的行
【发布时间】:2021-05-29 05:31:41
【问题描述】:

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

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

这将返回 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 

我在这里做错了什么?

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

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

    你可以运行:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多