使用group by而不是distinct时发生MariaDB联接错误



我在数据库中发现一个错误。我把它简化为一个简单的测试。我有两个表,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的身份证。

唯一的区别是子查询。在其中一个例子中,我使用groupby来获得不同的ID值。在另一种情况下,我使用distinct命令。这告诉我,这个团体没有做我认为它正在做的事情。那么,这是";正常的";MariaDB的行为,还是我的数据库搞砸了?

我在AWS上使用一个免费的MariaDB实例。所以,我几乎无法访问设置。

我想,最简单的解决方案是关闭DB:的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

最新更新