2016-04-16 4 views
1

私は2つのテーブルにいくつかの非正規化データを持っています。私は現在の顧客の残高を得ることができるので、私は彼のすべての操作をすべて集計する必要はありませんので、私はそれをUserBalanceテーブル(以下の最初のもの)に保存しますので、非正規化されています。時間:1つのSQLクエリで非正規化データの不一致を検出しますか?

 
+----+----------+---------+ 
| ID | Username | Balance | 
+----+----------+---------+ 
| 1 | Alice | 50  | 
+----+----------+---------+ 
| 2 | Bob  | 20  | 
+----+----------+---------+ 
| 3 | Charles | 30  | 
+----+----------+---------+ 
 
+----+------------+---------+ 
| ID | CustomerID | Amount | 
+----+------------+---------+ 
| 1 | 1   | 50  | 
+----+------------+---------+ 
| 2 | 2   | 80  | 
+----+------------+---------+ 
| 3 | 3   | 10  | 
+----+------------+---------+ 
| 4 | 2   | -60  | 
+----+------------+---------+ 
| 5 | 3   | 20  | 
+----+------------+---------+ 

これは、システム内の競争条件がある場合の整合性の問題が表示されます。だから、それらを検出するために、バランスの不一致を検出する毎日のDBクエリ(つまり、SUM(amount)balanceと異なる場合)を取得したいと考えています。どのように1つのSQLステートメントでそのようなJOINを行うには?

+0

は矛盾を防ぐのではなく、それを検出し、修正しようとする方が良いではありません。この

SELECT A.ID As customerId, A.BALANCE, SUM(B.AMOUNT) AS REAL_BALANCE FROM A JOIN B on A.ID = B.customerId GROUP BY A.ID, A.BALANCE HAVING SUM(B.AMOUNT) <> A.BALANCE 

を試してみてください? –

+0

はい、これはSQLをよく学ぶためのものですが、GROUPBY句が必要ですが、わかりません – user1623521

答えて

1

BがあなたのDepositsAndWithdrawalsテーブルでありAUserBalanceテーブル

関連する問題