【问题标题】:Mariadb / Mysql BUG? : group by `master` in subqueryMariadb / Mysql BUG? : 在子查询中按 `master` 分组
【发布时间】:2021-08-13 07:12:27
【问题描述】:

我有 2 张桌子:

销售额:

id invoice valid
100 IV001 Y

付款:

id master amount test
110 100 200 100
111 100 300 100
112 101 400 101

然后我做了一个查询:

select master, sum(amount) amount from payment group by master

并按预期给出结果

master amount
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 invoice amount
100 IV001 900 (should be 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

提前致谢。

【问题讨论】:

  • 欢迎来到 Stack Overflow。当我将第二个查询更正为“on p.master = s.id”而不是 = m.id... 对我有用(总共 500 个)。当我尝试您指出的语句时,我收到关于未知列“m.id”的错误如果该语句被接受为书面,那肯定是一个错误。您正在运行什么版本的 mySQL? (我不记得 master 是一个保留字。使用 MySQL 8.0 时,无论有没有引号,我都不会出错。
  • 哎呀,对不起我关于“on p.master = m.id”的错误,它必须是“on p.master = s.id”(已经编辑)。我使用的是 Mariadb 10.3 版,我在本地服务器和使用相同版本 Mariadb 的托管服务提供商上都得到了奇怪的结果。
  • 另外我在 Ubuntu 21.04 上运行 Mariadb 10.5 版,它给出了相同(错误)的结果。
  • 未转载。 dbfiddle.uk/…
  • 列 id 和 master 的数据类型是 varchar 而不是整数。我尝试使用@Akina 代码按预期工作。但我的数据由 php 代码提供。我尝试使用“on trim(p.master)=s.id”修改查询,结果还可以。我也尝试select * from payment where master=trim(master)显示所有数据,这意味着主列中没有空间。但是为什么要通过包含字符串来分组呢?还是我错了???我还是不明白为什么会这样。

标签: mysql subquery master reserved-words


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    optimizer_switch='split_materialized=off'
    

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

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

    【讨论】:

    【解决方案3】:

    貌似utf8mb4有问题:

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

    检查: character_set_server=utf8mb4 在你的 .conf 中

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多