2017-08-01 9 views
0

次のクエリを記述すると、エラーが無効になります。B.WO_NO。 WHERE句を指定せずにクエリを記述すると、work_order_coding_tabのすべての金額が更新されます。しかし、私はテーブルのすべてのデータを更新する必要はありません。しかし、代わりに、私は行だけを選択して更新する必要があります。私が試してみたいことについての提案。指定されたクエリの更新中のエラー

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句を必要としないと思う

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ロジックは、外側のWHERE句が何をしようとしているかを既に行います。

実際には、外側のWHERE句が必要な場合があります。 work_order_coding_tabテーブル内の特定のレコードへの金額の更新を制限したい場合。通常は、テーブル全体を更新するつもりがない限り、更新にいくつかの制限を設けることがベストプラクティスです。

+0

お返事ありがとうございます。はい、私はwork_order_coding_tabの特定のレコードを更新する必要があります。 work_order_codingビューには、WO_NOとROW_NOがあります。私はそれらの値を取って、WO_NOとROW_NOに等しいwork_order_coding_tabのレコードだけを更新する必要があります。これらのWO_NOとROW_NOは、上記のように書かれたselectから取られます。 (内部クエリ)。どのように私はそれを行うことができます任意の提案? – 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行しか選択されていません。しかし、この更新では、work_order_coding_tab内の行の数である540が更新されると言われている。これは、このメッセージが現れても、work_order_coding_tabで12レコードだけが更新されることを意味しますか?どこの条件が利用可能でないときは、どのようにして正確な行を選択しますか?無知をおかけして申し訳ありません – user3789200

関連する問題