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。它有效