使用 group by 而不是 distinct 时 MariaDB 加入错误
MariaDB join error when using group by instead of distinct
我在我的数据库中发现了一个错误。我将其简化为一个简单的测试。我有两个表,A 和 B。它们都有一列:ID。在 A 中,我将 1 到 100 中的每个数字都作为 ID。在 B 中,我只将偶数 2 放入 100,但我没有将其设为唯一列。我把每个数字随机数次。因此,A 中有 100 行(1 到 100),B 中有 542 行(值 2 到 100 的重复)。
此查询无效:
select a.id from a join (select id from b group by id) x on a.id=x.id;
我得到 100 行 ID 值从 1 到 100。所以,我从 A 中得到每一行,就好像这是一个外连接。
这个查询有效:
select a.id from a join (select distinct(id) id from b) x on a.id=x.id;
现在,我只能得到 2 到 100 的偶数 ID。
唯一的区别是子查询。其中之一,我使用 group by 来获取不同的 ID 值。另一方面,我使用 distinct 命令。这告诉我 group by 没有按照我认为的那样做。那么,这是 MariaDB 的“正常”行为还是我的数据库搞砸了?
我在 AWS 上使用免费套餐 MariaDB 实例。所以,我几乎无法访问设置。
我想,最简单的解决方案是为您的数据库关闭 ONLY_FULL_GROUP_BY
标志:
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
并且可能值得阅读 SQL 中关于群组模式的更多信息。
https://mariadb.com/kb/en/sql-mode/#only_full_group_by
我在我的数据库中发现了一个错误。我将其简化为一个简单的测试。我有两个表,A 和 B。它们都有一列:ID。在 A 中,我将 1 到 100 中的每个数字都作为 ID。在 B 中,我只将偶数 2 放入 100,但我没有将其设为唯一列。我把每个数字随机数次。因此,A 中有 100 行(1 到 100),B 中有 542 行(值 2 到 100 的重复)。
此查询无效:
select a.id from a join (select id from b group by id) x on a.id=x.id;
我得到 100 行 ID 值从 1 到 100。所以,我从 A 中得到每一行,就好像这是一个外连接。
这个查询有效:
select a.id from a join (select distinct(id) id from b) x on a.id=x.id;
现在,我只能得到 2 到 100 的偶数 ID。
唯一的区别是子查询。其中之一,我使用 group by 来获取不同的 ID 值。另一方面,我使用 distinct 命令。这告诉我 group by 没有按照我认为的那样做。那么,这是 MariaDB 的“正常”行为还是我的数据库搞砸了?
我在 AWS 上使用免费套餐 MariaDB 实例。所以,我几乎无法访问设置。
我想,最简单的解决方案是为您的数据库关闭 ONLY_FULL_GROUP_BY
标志:
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
并且可能值得阅读 SQL 中关于群组模式的更多信息。 https://mariadb.com/kb/en/sql-mode/#only_full_group_by