0

私は顧客列のtotal_ordersを更新して、顧客が出したすべての注文の合計数と等しくなるようにする必要があります(cust_orderで)ここに画像の説明を入力

ここに私が試したものがあります

update (select * 
        from atish_customer a 
        inner join 
        (
            select cust_nbr,count(cust_nbr) as count_orders
            from atish_cust_order 
            group by cust_nbr
        )c
        on c.cust_nbr=a.cust_nbr) 
set tot_orders=count_orders;

しかし、これは私が得るエラーです

ORA-01779: cannot modify a column which maps to a non key-preserved table
4

1 に答える 1

2

これはどう:

UPDATE customer SET total_orders = (
    SELECT COUNT(*) FROM cust_order 
    WHERE cust_order.cust_nbr = customer.cust_nbr
) 

[どこであなたatish_customeratish_customer_orderが関係するのかわかりません...彼らはあなたの図に示されていません]

説明:基本的に、内部選択は、各cust_nbrのcust_orderテーブルからの注文数をカウントするだけです。customer.cust_nbr外側を内側に結合することによりcust_order.cust_nbr、各[外側]行が正しい合計で更新されます。これは相関サブクエリと呼ばれます(短いチュートリアルについては、ここを参照してください)。

于 2012-07-25T14:47:10.203 に答える