如果写入以下查询,我收到的错误无效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 :(得分: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
表中某些记录的金额。通常情况下,最好对更新有一些限制,除非您真的打算更新整个表。