如何解决Mariadb/Mysql BUG? : 在子查询中按`master`分组
我有 2 张桌子:
销售:
id | 发票 | 有效 |
---|---|---|
100 | IV001 | 是 |
付款:
id | 大师 | 金额 | 测试 |
---|---|---|---|
110 | 100 | 200 | 100 |
111 | 100 | 300 | 100 |
112 | 101 | 400 | 101 |
然后我做了一个查询:
select master,sum(amount) amount from payment group by master
并按预期给出结果
大师 | 金额 |
---|---|
100 | 500 |
101 | 400 |
但是当我运行以下查询时:
select s.id,s.invoice,p.amount from sales s join (select `master`,sum(amount) amount from payment group by `master`) p on p.`master`=s.id
我得到了这样的错误结果
id | 发票 | 金额 |
---|---|---|
100 | IV001 | 900(应该是500) |
但是,如果我使用列 test
作为组列,结果将没问题。
我运行这个查询:
select s.id,p.amount from sales s join (select test,sum(amount) amount from payment group by test) p on p.test=s.id
一切都符合预期。
我猜这与保留字的列 master
有关,我已经使用了反引号 (`)。
我的问题是:如果我仍然想使用master
作为列名,如何解决这个问题?还是 Mariadb / Mysql 错误?
(我在 Ubuntu 21.04 上运行 Mariadb 版本 10.3 和 10.5)
编辑
请观看此视频:https://youtu.be/e2EEin1mf-E
提前致谢。
解决方法
这是 Mariadb 10.3.29、10.4.19、10.5.10 中的一个错误,现已修复但尚未发布。我们遇到了同样的问题,不得不回滚到 10.4.18。
https://jira.mariadb.org/browse/MDEV-25714
,正如 Simon 所解释的,这是一个影响 Mariadb 10.3.29、10.4.19、10.5.10 的错误
作为一种解决方法,您可以在 cnf 文件 [mysqld] 部分应用以下设置
optimizer_switch='split_materialized=off'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。