2017-08-01 67 views
0

如果编写了下面的查询,我得到错误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 

回答

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表中某些记录的更新金额。通常情况下,最好的做法是对更新有一些限制,除非你真的打算更新整个表。

+0

嗨谢谢,回复。是的,我需要更新work_order_coding_tab中的某些记录。 work_order_coding视图具有WO_NO和ROW_NO。我需要取这些值并只更新work_order_coding_tab中等于WO_NO和ROW_NO的记录。这些WO_NO和ROW_NO只能从如上所述的选择中获得。 (内部查询)。任何建议我怎么能做到这一点? – user3789200

+0

@ user3789200 - 对于'work_order_coding_tab a'中具有'A.WO_NO和A.ROW_NO'且非空的每一行,更新将会成功,因为'B.sales_price_amount'取自'work_order_coding B中的那些记录',它们与'work_order_coding_tab a'的确切'A.WO_NO和A.ROW_NO'具有对应关系。你很安全。 – g00dy

+0

好的。选择查询仅选择了12行。但是在更新中,据说540更新了这是work_order_coding_tab中的行数。这意味着,虽然此消息出现,但只有12条记录将在work_order_coding_tab中更新?但是当没有可用的条件时,它如何选择确切的行。对不起,无知 – user3789200