更新给定查询的错误

时间:2017-08-01 06:05:57

标签: oracle

如果写入以下查询,我收到的错误无效B.WO_NO。如果在没有WHERE子句的情况下编写查询,则更新work_order_coding_tab中的所有金额值。但我不需要更新表中的所有数据。但相反,我只需要更新内部选择的行选择。对我可以尝试的任何建议。请帮忙

UPDATE work_order_coding_tab A
A.amount = (SELECT B.sales_price_amount
                     FROM work_order_coding B
                     WHERE A.WO_NO = B.WO_NO AND
                     A.ROW_NO=B.ROW_NO  
                     AND B.work_order_cost_type_db = 'M'
                     AND B.order_no IS NULL
                     AND B.catalog_no IS NOT NULL        
                     AND A.amount is not null and A.amount <> B.sales_price_amount and B.contract like 'TZ%'  
                     and abc.active_separate_api.get_line_no(B.wo_no) =2)
 WHERE A.WO_NO = B.WO_NO AND
       A.ROW_NO=B.ROW_NO 

1 个答案:

答案 0 :(得分:0)

我认为您甚至不需要当前的外WHERE子句,即只需使用它:

UPDATE work_order_coding_tab A
SET A.amount = (SELECT B.sales_price_amount
                FROM work_order_coding B
                WHERE
                    A.WO_NO = B.WO_NO AND
                    A.ROW_NO = B.ROW_NO AND
                    B.work_order_cost_type_db = 'M' AND
                    B.order_no IS NULL AND
                    B.catalog_no IS NOT NULL AND        
                    A.amount IS NOT NULL AND
                    A.amount <> B.sales_price_amount AND
                    B.contract LIKE 'TZ%' AND
                    abc.active_separate_api.get_line_no(B.wo_no) = 2)

发生错误是因为别名B不存在,并且在子查询外部不可用。但是,相关子查询中的WHERE逻辑已经执行了外部WHERE子句尝试执行的操作。

请注意,您实际上可能需要外部WHERE子句,例如如果您想限制更新work_order_coding_tab表中某些记录的金额。通常情况下,最好对更新有一些限制,除非您真的打算更新整个表。