Mariadb/Mysql BUG? : 在子查询中按`master`分组

时间:2021-05-25 03:08:59

标签: mysql subquery master reserved-words

我有 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

提前致谢。

2 个答案:

答案 0 :(得分:0)

这是 Mariadb 10.3.29、10.4.19、10.5.10 中的一个错误,现已修复但尚未发布。我们遇到了同样的问题,不得不回滚到 10.4.18。

https://jira.mariadb.org/browse/MDEV-25714

答案 1 :(得分:0)

正如 Simon 所解释的,这是一个影响 Mariadb 10.3.29、10.4.19、10.5.10 的错误

作为一种解决方法,您可以在 cnf 文件 [mysqld] 部分应用以下设置

optimizer_switch='split_materialized=off'