我有 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, s.invoice, 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
提前致谢。
答案 0 :(得分:0)
这是 Mariadb 10.3.29、10.4.19、10.5.10 中的一个错误,现已修复但尚未发布。我们遇到了同样的问题,不得不回滚到 10.4.18。
答案 1 :(得分:0)
正如 Simon 所解释的,这是一个影响 Mariadb 10.3.29、10.4.19、10.5.10 的错误
作为一种解决方法,您可以在 cnf 文件 [mysqld] 部分应用以下设置
optimizer_switch='split_materialized=off'