2016-05-27 11 views
0

私はこの1つに固執しています。何私がしなければならないことは、それは彼らが作ったすべての注文の合計金額が含まれているので、列がテーブルクライアントに負って更新することで、今複数のテーブルのデータを含むテーブルを更新する

Table 1: 
**ORDERS** 

    | ORDER_NO | PRODUCT_NO | CLIENT_NO | UNITS | ORDER_DATE | 

Table 2: 
**CLIENTS** 

| CLIENT_NO | NAME | LOCATION | SELLER_NO | OWES | OVERPAID | CREDIT_LIMIT | 

Table 3: 
**PRODUCTS** 

| PRODUCT_NO | DESCRIPTION | UNIT_PRICE | AVAILABLE_STOCK | 

:私は3つのテーブルを持っています。

これは私が得た限りである:注文の合計数を取得するためにうまく動作するようだが、(いずれかの順序Iは、与えられたアイテムの価格を掛けする必要がより

update CLIENTS set OWES = (select sum(o.UNITS) from ORDERS o where CLIENTS.CLIENT_NO = o.CLIENT_NO); 

私は自分自身を混乱させる。

私は例えば試してみました:

update CLIENTS set OWES = (select sum(o.UNITS) from ORDERS o where CLIENTS.CLIENT_NO = o.CLIENT_NO)*(select UNIT_PRICE from PRODUCTS where PRODUCT_NO= any(select PRODUCT_NO from ORDERS)); 

しかし、それは ERROR 1242(21000)を返します。サブクエリは複数行

私が間違って何をやっているが返されますか? CLIENTSを(より複雑なサブクエリがここに表示されます)として使用する方が良いでしょうか? 誰も私を助けて、そのような解決策ではなく他の理由で何らかの説明をスローすることができますか?私はもっ​​と基本的なレベルで何かを得ていないようで、今は苦労しているようです。

ありがとうございます。

答えて

2

私はあなただけサブクエリでjoinを行い、適切な集計を行うことができると思います。

update CLIENTS 
    set OWES = (select sum(o.UNITS * p.unit_price) 
       from ORDERS o join 
        products p 
        on o.product_no = p.product_no 
       where CLIENTS.CLIENT_NO = o.CLIENT_NO 
       ); 
+0

ありがとうございました。私は頭がおかしくなっていると思っています。それは魅力のように機能します! – CNB

0

あなたの構文は少しオフになっています。他のテーブルから更新する一般的な構文は次のとおりです。

UPDATE table1 
JOIN table2 ON table2.mycolumn = table1.mycolumn 
JOIN (
    SELECT foo, SUM(bar) as sumbar FROM table3) table3sum ON table3sum.foo = table1.foo 
SET 
table1.foo = table2.bar, 
table1.baz = table3sum.sumbar 
+0

ありがとう、私は将来を考えています。 :) – CNB

関連する問題