2013-04-17 37 views
1

我想参考其他表更新表的两列。执行脚本时显示错误。如何更新与其他表连接的表中的列?

错误:错误的命令开始第1行:

UPDATE wb_costing_work_items, 
     sa_sales_documents, 
     sa_sales_document_items 
    SET cwi_price_per_hour = sdi_price, 
     cwi_amount = sdi_price * cwi_hours 
WHERE cwi_lo_id = sad_lo_id 
    AND sdi_sad_id = sad_id 
    AND sdi_wit_id = cwi_wit_id 
    AND cwi_id = 1650833 

Error at Command Line:1 Column:28 Error report: SQL Error: ORA-00971: missing SET keyword 00971. 00000 - "missing SET keyword"

SQL语句

UPDATE wb_costing_work_items cwi, 
     sa_sales_documents sad, 
     sa_sales_document_items sdi 
    SET cwi.cwi_price_per_hour = sdi.sdi_price, 
     cwi.cwi_amount = sdi.sdi_price * cwi.cwi_hours 
WHERE cwi.cwi_lo_id = sad.sad_lo_id 
    AND sdi.sdi_sad_id = sad.sad_id 
    AND sdi.sdi_wit_id = cwi.cwi_wit_id 
    AND cwi.cwi_id = 1650855 
+0

您想要更新哪张表? –

+0

我想更新表wb_costing_work_items的两列值应该来自其他表 –

回答

0

事情是这样的,也许。

请注意,我不得不使用一些关于哪个列属于哪个表的野蛮猜测,因为您没有包含关于如何定义表的任何信息。

所以最可能我没有得到它的权利,你将需要调整查询到您的实际表结构。

merge into wb_costing_work_items 
using 
(
    select cwi.pk_column, -- don't know what the PK of the wb_costing_work_items is due to lack of information 
      sdi.sdi_price, -- don't know if this column really belong to this table 
      sdi.sdi_price * cwi.cwi_hours as total-- again unsure about column names due to lack of information 
    FROM wb_costing_work_items cwi 
     JOIN sa_sales_documents sad ON sad.sad_lo_id = cwi.cwi_lo_id -- not sure about these, due to lack of information 
     JOIN sa_sales_document_items sdi 
     ON sdi.sad_id = sad.sdi_sad_id  -- not sure about these, due to lack of information 
     AND sdi.sdi_wit_id = cwi.cwi_wit_id -- not sure about these, due to lack of information 

) t ON (t.pk_column = w.pk_column) -- not sure about this, due to lack of information 
when matched then 
update 
    set cwi_price_per_hour = t.sdi_price, 
     cwi_amount = t.total; 
+0

好吧,让我测试它。 –

+0

这里别名“w”代表什么? –

+0

谢谢!其作品! –

1

这应该肯定有效。

  UPDATE (SELECT cwi_price_per_hour, 
          sdi_price, 
          cwi_amount, 
          sdi_price, 
          cwi_hours 
         FROM wb_costing_work_items, 
          sa_sales_documents, 
          sa_sales_document_items 
        WHERE  cwi_lo_id = sad_lo_id 
          AND sdi_sad_id = sad_id 
          AND sdi_wit_id = cwi_wit_id 
          AND cwi_id = 1650833) 
       SET cwi_price_per_hour = sdi_price, cwi_amount = sdi_price * cwi_hours 

请使用别名表和前缀列,以便可以轻松读取您的查询。

+0

我尝试执行它显示的语句错误行:12列:19 错误报告: SQL错误:ORA-01779:无法修改映射到非密钥保存表的列 01779. 00000 - “无法修改一个映射到非键保存表的列“ *原因:试图插入或更新连接视图的列,其中 映射到非键保留表。 *操作:直接修改底层基表。 –