我有一个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子句被完全忽略了。
任何人都可以帮我解释一下吗?
答案 0 :(得分:4)
您没有FROM子句中包含的表warehouse_box。如果您添加warehouse_box并将其加入Warehouse_box_status,它应该可以解决您的问题。
答案 1 :(得分:1)
您似乎没有在warehouse_box
和WHERE
中选择INNER JOIN
- 仅从其他表中选择...
答案 2 :(得分:1)
使用相同的FROM和WHERE子句执行SELECT时会发生什么?
如果您获得所有200K行,您可以采取一些措施来追踪问题。
如果您只获得要更新的6条记录,则应该开始寻找可能正在更新整个表的触发器。