2016-09-27 3 views
0

私はこのDBを持っている:このクエリを正しく構築するにはどうすればよいですか?これは適切なMySqlスキームですか?

* net_sales 
account_id (pk) 
date (pk) 
amount 

* refund 
account_id (pk) 
date (pk) 
amount 

* fees 
account_id (pk) 
date (pk) 
amount 

* adjustment_3rd_party 
account_id (pk) 
date (pk) 
amount 

* corporate_charges 
account_id (pk) 
date (pk) 
amount 

彼らは私が分離同じPKを共有しますが、その後の場合には、おそらく、私はテーブルに列を追加し続ける必要はありませんでしょうに対処する新しい変数が存在しています、代わりに私は別のテーブルを作成し、それらを連結することができます。私が何か間違ったことをやっている

SELECT net_sales.amount, refund.amount, fees.amount, adjustment_3rd_party.amount, corporate_charges.amount 
FROM net_sales 
LEFT JOIN refund ON (refund.date = net_sales.date AND refund.account_id = net_sales.account_id) 
LEFT JOIN fees ON (fees.date = net_sales.date AND fees.account_id = net_sales.account_id) 
LEFT JOIN adjustment_3rd_party ON (adjustment_3rd_party.date = net_sales.date AND adjustment_3rd_party.account_id = net_sales.account_id) 
LEFT JOIN corporate_charges ON (corporate_charges.date = net_sales.date AND corporate_charges.account_id = net_sales.account_id) 
WHERE net_sales.account_id = 40394 AND net_sales.date = '2016-01-01'; 

これは私がやっているのですか?私は重複をたくさんしているし、それらのすべてが同じ量を持っています...

ありがとう!

+0

このコードの結合はうまくいくようですが、これはWHERE net_sales.account_id = 40394として実行されるコードではなく、net_sales.account_id = '2016-01-01'はゼロの行を返し、net_sales.account_idは両方になることはできません。 P .:なぜ払い戻しはいつも販売と同じ日に行われますか? – Matijs

+0

テーブルはその日に置かれた取引のもので、払い戻しが当日の売り上げであったわけではありませんが、その日に発行されたものです。では、正しく引き出すためにクエリをどのように構築する必要がありますか? – Kitara

+0

この問合せが行をまったく返すことができないため、実行した問合せではなく、これについての私のコメントの最初の部分をお読みください。 – Matijs

答えて

0

問題はクエリ内ではなくデータ内にあるようです。

1つのnet_sales account_idと日付の組み合わせに対して2つの払い戻し金額と2つの手数料金額がある場合、このクエリは各料金行の払い戻し行ごとに固有の組み合わせを持つ4つの行を返します。言い換えれば、それはあなたが描写する方法で爆発する可能性があります。

これは、いくつかのテーブルに重複行が含まれていることを意味します。つまり、このaccount_idと日付の組み合わせによって複数の行が返されます。

つまり、主キーは強制されません。

+0

こんにちは、ありがとう。それは私が思いつく質問でした...私はphpmyadminを試してみましたが、重複がたくさんありました。そして、私はここに助けを求めて投稿しました... – Kitara

+0

もう一度:このクエリは何も返しません! net_sales.account_idは40394と '2016-01-01'の両方にはなりません。あなたは別のクエリを使用しました。 – Matijs

+0

ああ!謝罪します!!!私はあなたが意味するものを参照してください!!!!私の質問で修正しましょう。それを指摘してくれてありがとう – Kitara

関連する問題