2012-01-15 9 views
0

2つのテーブルsales @ &のデータを1つのテーブルで結合しようとしています。両方とも販売&購入テーブルは3番目のテーブルストアから外部キーを共有します。2つのテーブルのデータを結合するMYSQLクエリ第3のテーブルの外部キーを共有

結果を正確に結果表に表示するには、どのような方法が最適ですか。クエリ結果のビューを作成する必要があるため、サブクエリを使用しないでください(可能な場合)。サブクエリを使用してクエリに対してビューを作成できるようにします。

私は組合で選択しようとしましたが、期待どおりの結果が得られませんでした。

underlying tables & query result

答えて

0

次のクエリ(テストしていませんが)あなたが望む結果セット与える必要があります。

SELECT store_name AS store, MONTH(sales.date) AS month, SUM(sales.sales) AS sales, SUM(purchase.purchase) AS purchase 
FROM store 
JOIN sales ON store.store_id = sales.store_id 
JOIN purchase ON store.store_id = purchase.store_id 
GROUP BY store.store_id,MONTH(sales.date), MONTH(purchase.date) 
0

を私はあなたがグループに必要があるとして、サブクエリせずにその期待される結果を得ることが可能であるとは思いません2つの異なるテーブルから格納することができます。両方とも、各グループに複数の行があり、グループ化する前にそれらを結合すると行が増えます。さらに、これらの結果を完全に外部結合する必要があります。これはmysqlがサポートされておらず、2つの反対側の左結合の和集合でそれをエミュレートする必要があります。したがって、基本的にこのテーブルスキーマでは、複雑なクエリを使用しなければならず、実生活の例よりも学問的な問題に似ています。

(SELECT st.store_name, s.month, 
      COALESCE(s.salestotal, 0) as salestotal, 
      COALESCE(p.purchasetotal, 0) as purchasetotal 
FROM 
    store st 
    JOIN 
    (SELECT store_id, SUM(sales) as salestotal, 
      DATE_FORMAT(date, '%b %Y') as month 
     FROM sales 
     GROUP BY store_id, month) s 
    ON st.store_id = s.store_id 
    LEFT JOIN 
    (SELECT store_id, SUM(purchase) as purchasetotal, 
     DATE_FORMAT(date, '%b %Y') as month 
     FROM purchase 
     GROUP BY store_id, month) p 
    ON p.store_id = s.store_id AND p.month = s.month) 
UNION 
(SELECT st.store_name, p.month, 
      COALESCE(s.salestotal, 0) as salestotal, 
      COALESCE(p.purchasetotal, 0) as purchasetotal 
FROM 
    store st 
JOIN 
    (SELECT store_id, SUM(purchase) as purchasetotal, 
      DATE_FORMAT(date, '%b %Y') as month 
    FROM purchase 
    GROUP BY store_id, month) p 
ON st.store_id = p.store_id 
LEFT JOIN 
    (SELECT store_id, SUM(sales) as salestotal, 
    DATE_FORMAT(date, '%b %Y') as month 
    FROM sales 
    GROUP BY store_id, month) s 
ON 
    p.store_id = s.store_id AND p.month = s.month) 
ORDER BY month, store_name 
+0

クエリが機能しません。ところで、そこから結果を得るために、これらの既存のテーブルから新しいテーブルを作成するような他の方法があります – Joshi

+0

どのように正確にそれがあなたのために働いていないかについて具体的にしてください。何らかのエラーメッセージが表示された場合は、ここにメッセージを書いてください。例えば、事例データと期待どおりの結果が得られない場合はどうすればいいですか?また、ウィンドウに収まらない完全なクエリーをコピーし、すべてのクエリーを表示するにはスクロールダウンする必要があります。 – piotrm

関連する問題