Почему этот оператор UPDATE обновляет каждую запись? - PullRequest
0 голосов
/ 28 мая 2009

У меня есть оператор 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, обновлены их статусы. Однако я вижу, что все 200 000+ записей обновлены. Как будто предложение WHERE полностью игнорируется.

Может ли кто-нибудь помочь пролить свет на это для меня?

Ответы [ 3 ]

4 голосов
/ 28 мая 2009

У вас нет таблицы warehouse_box, включенной в предложение FROM. Если вы добавляете warehouse_box и присоединяете его к warehouse_box_status, это должно решить вашу проблему.

1 голос
/ 28 мая 2009

Что происходит, когда вы выполняете SELECT с теми же предложениями FROM и WHERE?

  • Если вы получите все 200К строк, есть способы, которые вы можете сделать, чтобы отследить проблему оттуда.

  • Если вы получаете только 6 записей, которые хотите обновить, самое время начать поиск триггеров, которые могут обновлять всю таблицу.

РЕДАКТИРОВАТЬ: похоже, более острые глаза уже нашли проблему.

1 голос
/ 28 мая 2009

Вы не выбираете warehouse_box в WHERE и INNER JOIN с - только из других таблиц ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...