Как обновить один столбец, используя другой столбец в другой таблице? Ошибка SQL: ORA-00933: команда SQL неправильно завершена - PullRequest
0 голосов
/ 29 января 2012

Я перепробовал все, что мог, но не смог решить эту ошибку 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 ]

7 голосов
/ 29 января 2012

Если вы хотите обновить строки из подзапроса с более чем одной записью, вы можете использовать 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
2 голосов
/ 29 января 2012

Попробуйте это:

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 
)
1 голос
/ 29 января 2012
UPDATE SALES_DATA_FAMILY_2007 A 
SET A.POG_ID= (select B.POG_ID 
                 FROM POG_HIERARCHY B  
                WHERE A.FAMILY_ID=B.FAMILY) ;

Это будет работать тогда и только тогда, когда в POD_HIERARCHY будет не более одной соответствующей строки для данной СЕМЬИ.Если в POD_HIERARCHY более одной строки, вам нужно определить, из какой строки из POD_HIERARCHY вы хотите использовать значение из.

0 голосов
/ 18 сентября 2013
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);
...