-2

我试过在这里搜索这个特定的主题,但没有找到答案......无论如何,我的目标是更新表(我们称之为 t_item),特别是列 owner_id,其值取决于另一个表(t_item_geo 在转链接到 t_geo)。

我不完全确定下面的语法对于更新语句是否真的有效。

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。谢谢!

4

1 回答 1

1

尝试这个

MERGE INTO t_item
USING 
(
    SELECT t_item.owner_id FROM
    t_item,
    t_item_geo,
    t_geo,
    t_item.rowid rowid_sub 
    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')
) on (rowid = rowid_sub)
WHEN MATCHED THEN
UPDATE SET owner_id= 6993;  
于 2013-04-18T21:28:34.443 回答