为什么这个UPDATE语句会更新每条记录?

时间:2009-05-28 00:35:44

标签: sql sql-update

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

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

预期结果是与WHERE子句匹配的6条记录更新其状态。我所看到的是,所有200,000多条记录都已更新。好像WHERE子句被完全忽略了。

任何人都可以帮我解释一下吗?

3 个答案:

答案 0 :(得分:4)

您没有FROM子句中包含的表warehouse_box。如果您添加warehouse_box并将其加入Warehouse_box_status,它应该可以解决您的问题。

答案 1 :(得分:1)

您似乎没有在warehouse_boxWHERE中选择INNER JOIN - 仅从其他表中选择...

答案 2 :(得分:1)

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

  • 如果您获得所有200K行,您可以采取一些措施来追踪问题。

  • 如果您只获得要更新的6条记录,则应该开始寻找可能正在更新整个表的触发器。

编辑:看起来眼睛更清晰已经发现了问题。