#mysql
#mysql
Вопрос:
выполнение этого запроса не на 100% точно. иногда запускается, но это серьезные ошибки
Я пытаюсь получить доступный баланс пользователей, формула такова
Total Income - (Total Expense Total Investment)
Это мой запрос
пожалуйста, дайте мне знать, что я делаю не так, и как я могу сделать это лучше.
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
start transaction;
CREATE TEMPORARY TABLE txn(
source_type varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
amount decimal(11,0) DEFAULT 0
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
alter table txn add key source_type (source_type);
insert into txn(amount,source_type)
SELECT SUM(amount) as amount,source_type FROM `mst_transaction`
JOIN mst_vendor on mst_vendor.vendor_id=mst_transaction.vendor_id
JOIN mst_source_type on mst_source_type.source_type_id=mst_vendor.source_type_id
WHERE mst_transaction.`family_id`='XHYYYZZZ' and source_type <>'Withdraw' GROUP by source_type;
select amount into @income from txn WHERE source_type='Income';
SELECT sum(amount) into @exp FROM txn WHERE source_type <> 'Income';
SELECT round(@income-@exp,2) as available_balance;
commit
иногда этот запрос выполняется, но в большинстве случаев отображается эта ошибка
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'start transaction; CREATE TEMPORARY TABLE txn( source_type varchar(20) CHARAC' at line 2 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; start transaction; CREATE TEMPORARY TABLE txn( source_type varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, amount decimal(11,0) DEFAULT 0 )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; alter table txn add key source_type (source_type); insert into txn(amount,source_type) SELECT SUM(amount) as amount,source_type FROM `mst_transaction` JOIN mst_vendor on mst_vendor.vendor_id=mst_transaction.vendor_id JOIN mst_source_type on mst_source_type.source_type_id=mst_vendor.source_type_id WHERE mst_transaction.`family_id`='FMLY21254787' and source_type <>'Withdraw' GROUP by source_type; select amount into @income from txn WHERE source_type='Income'; SELECT sum(amount) into @exp FROM txn WHERE source_type <> 'Income'; SELECT round(@income-@exp,2) as available_balance; commit;
Комментарии:
1. Похоже, что это тело процедуры, и предыдущее переназначение разделителя потеряно.
2. Я тебя не понял