2016-08-16 11 views
0

私はSQLの初心者です。ORDER_PRODUCTSには、注文の商品とEXCHANGE_PRODUCTSのリストがあり、交換される予定の商品が掲載されています。複数のテーブルからのSQLの選択数

どちらも同じフィールドを持っており、order_idで区別すると、amountの両方のテーブルの商品を数えて選択する必要があります。

ORDER_PRODUCTS私はこのクエリはあなたが必要とする何をすべきだと思う

+-----+------------+----------+---------+ 
| id | product_id | order_id | amount | 
+-----+------------+----------+---------+ 
| 1 |   5 |  1 |  2 | 
| 2 |   7 |  1 |  1 | 
| 3 |   13 |  5 |  1 | 
| 4 |   18 |  8 |  3 | 
| 5 |   45 |  11 |  4 | 
+-----+------------+----------+---------+ 

EXCHANGE_PRODUCTS

+-----+------------+----------+---------+ 
| id | product_id | order_id | amount | 
+-----+------------+----------+---------+ 
| 1 |   5 |  1 |  1 | 
| 2 |   7 |  1 |  2 | 
| 3 |   13 |  5 |  1 | 
| 4 |   3 |  8 |  2 | 
| 5 |   2 |  11 |  1 | 
+-----+------------+----------+---------+ 
+0

お試しいただいたクエリはどこですか? –

+1

期待した結果のサンプルを提供してください。 – scaisEdge

+0

注文と交換のオブジェクトの合計が必要ですか?または2つの異なる数字? – Whencesoever

答えて

3

あなたは、テーブルを結合し、それらを集約するunion allを使用したいです。私はお勧めかもしれません:

select order_id, sum(ordered) as ordered, sum(exchanged) as exchanged, 
     sum(exchanged + ordered) as total 
from ((select order_id, amount as ordered, 0 as exchanged 
     from order_products 
    ) union all 
     (select order_id, 0 as ordered, amount as exchanged 
     from exhange_products 
    ) 
    ) oe 
group by order_id; 

unionは(悪い数字につながることができます)重複を削除するので、むしろunionよりunion allを使用することが重要です。 Unionはまた不要なオーバヘッドを招く。

そして、「数量」によって、私はあなたが実際に合計を取ることを意味すると思います。

+0

Gordonありがとう、ちょうど私が必要としたように働いた。私はこれらの高度なステートメントをさらに詳しく見ていきます。 – Rafael

3

select sum(amount), order_id from (
    select amount,order_id from order_products 
    union 
    select amount,order_id from Exchange_products) 
group by order_id 
+0

私は、COUNTとproduct_idの代わりにorder_idの代わりにSUMを使用すると、これが正しい答えだと思います。 Countは、amount列内の値の代わりに行を数えます。 そして、彼は、注文の数が何部であるのかを知りたいと思うと思います。 –

+1

@RubenPirotte申し訳ありませんが、私のせいです。私の答えを変更しました – Jens

+0

まだ私はそれがorder_idではなくどこでもproduct_idであるべきだと思います。 –

関連する問題