これは私が開発していますシステムのデータベースの一部であり、クライアントの名前と、このそれぞれのクライアントのすべての販売の合計。つまり、顧客が販売に費やした金額。のMySQL Workbenchのバグは
のは、例を作成してみましょう:第一の状況では
Table client:
cliId = 1, cliName = "client1";
Table product:
proId = 1, proName = "prod1", proBaseValue = 3;
proId = 2, proName = "prod2", proBaseValue = 2.5;
proId = 3, proName = "prod3", proBaseValue = 1;
Table sale:
salId = 1, salAddition = 0, salDiscount = 1, sal_cliId = 1;
salId = 2, salAddition = 2, salDiscount = 0, sal_cliId = 1;
salId = 3, salAddition = 0, salDiscount = 2, sal_cliId = 1;
Table saleitems (Weak Entity from the relationship between sale and product):
sli_salId = 1, sli_proId = 2, sliRealValue = 2.5, sliQuantity = 1;
sli_salId = 2, sli_proId = 2, sliRealValue = 2.5, sliQuantity = 2;
sli_salId = 2, sli_proId = 3, sliRealValue = 1, sliQuantity = 1;
sli_salId = 3, sli_proId = 1, sliRealValue = 3, sliQuantity = 1;
sli_salId = 3, sli_proId = 2, sliRealValue = 2.5, sliQuantity = 1;
sli_salId = 3, sli_proId = 3, sliRealValue = 1, sliQuantity = 2;
、 "salAddition" と "salDiscount" を無視して、私は、次のSQL文を使用して来た:
select cliName, (sum(sliRealValue * sliQuantity))
from exampledb.client join exampledb.sale join exampledb.saleitems
where cliId = sal_cliId and
salId = sli_salId
group by cliId;
そしてそれは完全に働きました。しかし問題は私が "salAddition"と "salDiscount"を数学に含めるときです。理論的には、このためのSQL文は次のようになります。私はそれを動作させるために、すべての追加や、すべての販売からのすべての割引を合計する必要が
select cliName, (sum(sliRealValue * sliQuantity) + sum(salAddition) - sum(salDiscount))
from exampledb.client join exampledb.sale join exampledb.saleitems
where cliId = sal_cliId and
salId = sli_salId
group by cliId;
注意してください。それは単純ではなかった...
上記の例によれば、追加値と割引を無視して、予想される合計値は$ 16であり、これらの属性を含めて合計は15ドルでなければならないが、結果I私の所見は13 $です。 コードと価値の組み合わせを数時間テストした結果、最初の販売ではが加算値と割引値にを1倍したことに気付きました。セカンドセールでは、同じ値に2を掛けています3回目の売却では、値に3を掛けていくなどします(いいえ、Id値とは関係ありません)。
私は...+ sum(salAddition) - sum(salDiscount)...
を...+ sum(salAddition - salDiscount)...
に置き換えようとしましたが、私は同じ価値(そして問題)を見出しています。
バグの内容を教えてもらえますか?可能であれば、この問題を解決する方法を教えてください。 MySQL Workbenchにバグが見つかりましたか?
ありがとうございます。
sqlステートメントはmysql workbenchではなくmysqlによって実行されるため、ワークベンチのバグではありません – Shadow