У меня есть некоторые денормализованные данные в двух таблицах. Он денормализован, потому что из таблицы DeposititsAndWithdrawals (второй ниже) я могу получить баланс текущего клиента, но для быстрого доступа я держу его в таблице UserBalance (сначала ниже), поэтому мне не нужно суммировать все его операции со всеми время:Обнаружение несогласованных денормализованных данных только в одном запросе 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 | +----+------------+---------+
Это поднимает проблему согласованности в случае, если есть условия гонки в системе. Поэтому, чтобы обнаружить их, я хотел бы иметь ежедневный запрос БД, который обнаруживает несоответствия баланса (то есть, когда SUM(amount)
отличается от balance
). Как сделать такой JOIN в одном выражении SQL?
Не лучше предотвратить противоречивость, а не пытаться обнаружить и исправить ее? –
да, но это должно изучить SQL лучше, я думаю, мне нужно предложение GROUPBY, но я не уверен – user1623521