代码之家  ›  专栏  ›  技术社区  ›  Erik Forbes

为什么此更新语句更新每个记录?

  •  0
  • Erik Forbes  · 技术社区  · 15 年前

    我有一个更新语句,用于为有限数量的记录更新状态字段。声明如下:

    UPDATE warehouse_box
    SET warehouse_box_status_id = wbsv.warehouse_box_status_id
    FROM
        warehouse_box_status_vw wbsv INNER JOIN
        pallet_warehouse_box pwb ON wbsv.warehouse_box_id = pwb.warehouse_box_id INNER JOIN
        routing_shipment_pallet rsp ON pwb.pallet_id = rsp.pallet_id
    WHERE
        rsp.date_removed IS NULL
        AND pwb.date_unpalletized IS NULL
        AND rsp.routing_shipment_id = 100002
    

    预期结果是,6条与WHERE子句匹配的记录的状态将得到更新。不过,我看到的是,所有超过20万条记录都已更新。就好像WHERE子句被完全忽略了。

    有人能帮我解释一下吗?

    3 回复  |  直到 15 年前
        1
  •  4
  •   Darrel Miller    15 年前

    您没有在FROM子句中包含表仓库\框。如果您添加了仓库箱并将其加入到仓库箱状态,那么应该解决您的问题。

        2
  •  1
  •   Alex Martelli    15 年前

    您似乎没有选择打开 warehouse_box WHERE INNER JOIN S——只从其他桌子……

        3
  •  1
  •   Edmund    15 年前

    使用相同的FROM和WHERE子句执行SELECT时会发生什么?

    • 如果你得到了所有的20万行,你可以做一些事情来从那里跟踪问题。

    • 如果只有6条要更新的记录,则是时候开始查找可能正在更新整个表的触发器了。

    编辑:看起来更敏锐的眼睛已经发现了问题。