Sql 为什么这个UPDATE语句要更新每个记录?

Sql 为什么这个UPDATE语句要更新每个记录?,sql,sql-update,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 JO

我有一个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
预期结果是6条与WHERE子句匹配的记录更新其状态。但我看到的是所有200000多条记录都被更新了。似乎WHERE子句被完全忽略了


有人能帮我解释一下吗?

您似乎没有在WHERE和Internal联接中选择on warehouse\u框-仅从其他表中选择…

您似乎没有在WHERE和Internal联接中选择on warehouse\u框-仅从其他表中选择…

您没有在from中包括table warehouse\u框条款如果您添加warehouse\u box并将其加入warehouse\u box\u状态,则应该可以解决您的问题。

FROM子句中没有包含表warehouse\u box。如果您添加warehouse\u box并将其加入warehouse\u box\u状态,应该可以解决您的问题。

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

如果你得到了所有的200000行,你可以做一些事情来追踪问题

如果您只得到了6条要更新的记录,那么就应该开始寻找可能正在更新整个表的触发器了


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

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

如果你得到了所有的200000行,你可以做一些事情来追踪问题

如果您只得到了6条要更新的记录,那么就应该开始寻找可能正在更新整个表的触发器了


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

将更新..设置部分替换为选择*并告诉我们返回了多少记录。将更新..设置部分替换为选择*并告诉我们返回了多少记录。Meh。没错。这可能是一个太接近问题的案例研究。。。非常感谢=无聊的。没错。这可能是一个太接近问题的案例研究。。。非常感谢=这就是困扰我的地方——当我在SELECT中使用这些子句时,我只得到了预期的6行,我知道没有触发器正在运行。这就是困扰我的地方——当我在SELECT中使用这些子句时,我只得到了预期的6行,我知道没有触发器正在运行。