0

我有一个 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 子句被完全忽略了。

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

4

3 回答 3

4

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

于 2009-05-28T00:40:51.843 回答
1

您似乎没有warehouse_boxWHEREand INNER JOINs 中进行选择-仅从其他表中选择...

于 2009-05-28T00:40:31.250 回答
1

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

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

  • 如果您只获得要更新的 6 条记录,那么是时候开始寻找可能会更新整个表的触发器了。

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

于 2009-05-28T00:41:12.713 回答