programing

MariaDB 생성 뷰가 SELECT를 다른(잘못된) 쿼리로 변경합니다.

itsource 2022. 9. 28. 23:34
반응형

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나중에 반환되는 쿼리는 다음과 같습니다(VAT 근처에 괄호가 없습니다).

select VAT, SUM(RetailPrice) / 1 + VAT as Sum from ReceiptItem
  group by VAT

원래 SELECT 쿼리와는 다른 결과를 얻을 수 있습니다.A / 1 + B와 동등하지 않다A / (1 + B)!
mysql이 왜 내 코드 뷰를 바꾸는지 비슷한 질문을 찾았습니다.단, 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를 지정합니다.그건 효과가 있다.

언급URL : https://stackoverflow.com/questions/63702231/mariadb-create-view-changes-the-select-to-a-different-incorrect-query

반응형