Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql查询执行不100%正常_Mysql - Fatal编程技术网

Mysql查询执行不100%正常

Mysql查询执行不100%正常,mysql,Mysql,此查询的执行不是100%确定的。有时运行,但它会彻底出错 我试图让用户获得可用余额,公式是这样的 Total Income - (Total Expense + Total Investment) 这是我的问题 请让我知道我做错了什么,我怎样才能更好地做到这一点 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; start transaction; CREATE TEMPORARY TABLE txn( source_type varch

此查询的执行不是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
设置事务隔离级别READ COMMITTED;
启动交易;
创建临时表txn(
源类型varchar(20)字符集utf8mb4 COLLATE utf8mb4\U unicode\U ci,
金额小数(11,0)默认为0
)ENGINE=InnoDB默认字符集=utf8mb4 COLLATE=utf8mb4\u unicode\u ci;
更改表txn添加键源类型(源类型);
插入txn(金额、来源类型)
从“mst\U交易”中选择金额(金额)作为金额、来源类型`
在mst\U供应商上加入mst\U供应商。供应商id=mst\U事务处理。供应商id
在mst\U源类型上加入mst\U源类型。源类型id=mst\U供应商。源类型id
其中,mst_transaction.`family_id`='XHYYYZZZ'和source_type按source_type“撤销”分组;
将金额选择为@income from txn,其中source_type='income';
从txn中选择@exp中的金额,其中来源类型为“收入”;
选择四舍五入(@income-@exp,2)作为可用的\u余额;
犯罪
有时会执行此查询,但大多数情况下会显示此错误

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;
您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以了解使用near“start transaction”的正确语法;创建临时表txn(第2行的source_type varchar(20)CHARAC'设置事务隔离级别READ COMMITTED;启动事务;创建临时表txn(source_type varchar(20)字符集utf8mb4 COLLATE utf8mb4_unicode_ci,金额十进制(11,0)默认值0)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4\u unicode\u ci;alter table txn add key source\u type(源类型);insert into txn(金额,源类型)选择SUM(金额)作为金额,来源类型来自“mst\U交易”加入mst\U供应商上的mst\U供应商。供应商id=mst\U交易。供应商id加入mst\U来源类型mst\U交易。来源类型\U id=mst\U供应商。来源类型\U id=mst\U交易中的mst\U供应商。来源类型\U id='FMLY21254787'和来源类型按来源类型“提取”分组;选择金额到@income FROM txn,其中来源类型='Income';从txn中选择进入@exp的总额(金额),其中来源类型为“收入”;选择四舍五入(@Income-@exp,2)作为可用余额;提交;

看起来这是一个过程体,前面的分隔符重新分配丢失了。我没听清楚