-3

我已经尝试了所有我能想到但无法解决这个 SQL 错误的方法:

SQL 错误:ORA-00933:SQL 命令未正确结束

这是 Oracle SQL。

    UPDATE SALES_DATA_FAMILY_2007 A 
    SET A.POG_ID=B.POG_ID 
    FROM POG_HIERARCHY B 
    WHERE A.FAMILY_ID=B.FAMILY ;

我尝试过的一种替代方法如下。不幸的是,它给出了另一个错误:ORA-01427:单行子查询返回多于一行

    UPDATE SALES_DATA_FAMILY_2007 
    SET POG_ID= (SELECT POG_HIERARCHY.POG_ID FROM POG_HIERARCHY 
    WHERE SALES_DATA_FAMILY_2007.FAMILY_ID=POG_HIERARCHY.FAMILY_ID) 
    WHERE EXISTS (SELECT POG_HIERARCHY.POG_ID FROM POG_HIERARCHY 
    WHERE SALES_DATA_FAMILY_2007.FAMILY_ID=POG_HIERARCHY.FAMILY_ID) 
    ;

请帮忙!

4

4 回答 4

7

如果要更新具有多个记录的子查询中的行,可以使用 merge commenad:

merge into SALES_DATA_FAMILY_2007 A
using (select POG_ID , FAMILY
                 FROM POG_HIERARCHY ) B
on (A.FAMILY_ID=B.FAMILY)
when matched then
update set A.POG_ID=B.POG_ID
于 2012-01-29T08:44:04.533 回答
2

尝试这个:

UPDATE SALES_DATA_FAMILY_2007 A
SET A.POG_ID =
(   
  SELECT P.POG_ID 
  FROM POG_HIERARCHY P
  WHERE A.FAMILY_ID = P.FAMILY_ID 
)
于 2012-01-29T03:55:38.990 回答
1
UPDATE SALES_DATA_FAMILY_2007 A 
SET A.POG_ID= (select B.POG_ID 
                 FROM POG_HIERARCHY B  
                WHERE A.FAMILY_ID=B.FAMILY) ;

当且仅当给定 FAMILY 的 POD_HIERARCHY 中最多有一个对应行时,这才有效。如果 POD_HIERARCHY 中有不止一行,那么您需要确定您希望使用 POD_HIERARCHY 中哪一行的值。

于 2012-01-29T03:52:27.980 回答
0
UPDATE SALES_DATA_FAMILY_2007 A 
SET A.POG_ID= (select B.POG_ID 
                 FROM POG_HIERARCHY B  
                WHERE A.FAMILY_ID=B.FAMILY)
WHERE A.POG_ID IN (SELECT C.POG_ID FROM POG_HIERARCHY C
                   WHERE A.FAMILY_ID = C.FAMILY);
于 2013-09-17T21:55:05.043 回答