如何解决MariaDB创建视图将SELECT更改为其他不正确查询
我有一个查询,希望在MariaDB 10.3(win)中作为一个视图,但是当我尝试创建这样的视图时,它被更改为另一个(且不正确)的视图,并删除了括号:
create or replace view v_ReceiptSumByVAT
as
select VAT,SUM(RetailPrice) / (1 + VAT) as Sum from ReceiptItem
group by VAT
稍后我运行SELECT VIEW_DEFINITION
时,返回的查询是(请注意增值税附近缺少括号)
select VAT,SUM(RetailPrice) / 1 + VAT as Sum from ReceiptItem
group by VAT
给出的结果与原始SELECT查询不同-A / 1 + B
不等于A / (1 + B)
!
我发现了一个类似的问题why mysql change my code view?,该问题涉及MySql,并且该查询被更改为等效查询,而不是另一个查询。如何确保正确创建视图?
解决方法
嗯,似乎是个错误,请考虑向项目报告。作为解决方法,您可以尝试仅使用派生表进行汇总,然后使用外部查询对总和进行算术运算。
CREATE VIEW v_receiptsumbyvat
AS
SELECT vat,sum / (vat + 1) sum
FROM (SELECT vat,sum(retailprice) sum
FROM receiptitem
GROUP BY vat) x;
至少在似乎可行的db<>fiddle上。
,这是MariaDB服务器中的错误。
有关状态,请在MariaDB的故障单系统中检查MDEV-23656
,像这样更改您的查询并查看结果
create or replace view v_ReceiptSumByVAT
as
select ROUND(VAT,1 / (1 + VAT) * SUM(RetailPrice)) as Sum from ReceiptItem
group by VAT
在MySQL / MariaDB中,如果在函数之后指定表达式,则视图会删除括号,因此在函数之前指定exp。它有效
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。