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

命令行错误:1 列:28 错误报告:SQL 错误:ORA-00971:缺少 SET 关键字 00971。00000 -“缺少 SET 关键字”

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
4

2 回答 2

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

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

于 2013-04-17T14:45:54.860 回答
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;
于 2013-04-17T14:08:35.543 回答