3つのテーブル。Mysqlの左結合が期待通りに機能しない
table_customers - customer_id, name
table_orders - order_id, customer_id, order_datetime
table_wallet - customer_id, amount, type // type 1- credit, type 2- debit
すべてのお客様、合計残高、および最終注文日と注文IDを取得する必要があります。お客様が0000-00-00、返品オーダーIDを0に設定していない場合、
これは私の質問です。
SELECT
C.customer_id,
C.name,
COALESCE(SUM(CASE WHEN type = 2 THEN -W.amount ELSE W.amount END), 0) AS value,
COALESCE(max(O.order_id ) , '0') AS last_order_id,
COALESCE(max(date(O.order_datetime)) , '0000-00-00') AS last_order_date
FROM
table_customers as C
LEFT JOIN
table_wallet as W
ON C.customer_id = W.customer_id
LEFT JOIN
table_orders AS O
ON W.customer_id = O.customer_id
group by C.customer_id
ORDER BY C.customer_id
お客様の価値を除いてすべてが正しいとされています。結果から、複数回追加されているようです。
私はここでフィーバーを作成しました。 http://sqlfiddle.com/#!9/560f2/1
クエリで何が間違っていますか?誰かが私にこれを助けることができますか?
編集:期待される結果
customer_id name value last_order_id last_order_date
1 abc 20 3 2016-06-22
2 def 112.55 0 0000-00-00
3 pqrs 0 4 2016-06-15
4 wxyz 0 0 0000-00-00
が私に正しく見える量の顧客ID 1の重複。明確にするために期待される結果を追加したいですか? – fancyPants
@fancyPantsは、問題の予想される結果を追加しました。 –