Я пробовал искать эту тему здесь, но не нашел ответа ... Во всяком случае, моя цель - обновить таблицу (назовем ее t_item), в частности column owner_id со значениями в зависимости от другой table (t_item_geo, которая в свою очередь связана с t_geo).Oracle SQL update
Я не совсем уверен, действительно ли синтаксис ниже для операторов обновления.
UPDATE t_item SET owner_id= 6993 WHERE t_item.owner_id in
(SELECT t_item.owner_id FROM
t_item,
t_item_geo,
t_geo
WHERE
t_item.id = t_item_geo.item_id and
t_item_geo.geo_id = t_geo.id and
t_item.owner_id in (SELECT id FROM t_user WHERE network_id='fffffff') and
t_geo.id in (SELECT id FROM t_geo WHERE full_name = 'yyyyyyy')
);
Во всяком случае, моя проблема с этим запросом является то, что он обновляет гораздо больше строк, чем она должна - если отделить только оператор выбора Oracle возвращает ~ 750 строк, но udpate сам обновляет более 4000 строк. Это почти так, как если бы состояние было полностью проигнорировано, что указывало бы мне на неправильный синтаксис.
Мне нужно обновить определенное значение в таблице на основе выбора из нескольких других «соединенных» таблиц. Надеюсь, это имеет смысл.
Спасибо за любой вклад!
ОБНОВЛЕНИЕ: извините - возможно, это было непонятно из самого вопроса, но правильное количество отредактированных элементов должно быть ~ 750, а не ~ 4000. Благодаря!
это должно работать - даже я F находит подвыборку имеет 750 строк, не может быть 4000 в таблице t_item, которые соответствуют этим идентификаторам – Randy
Я согласен с Рэнди, если owner_id не PK (или уникальный столбец) в этой таблице может быть много строк, которые соответствуют этим 750 идентификаторам – JordanBean
Ну, вы можете использовать [скрипку] (http://www.sqlfiddle.com) и выяснить, действительно ли это. – hd1