sql中 group by 的优先级高 还是 join的优先级高?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中 group by 的优先级高 还是 join的优先级高?相关的知识,希望对你有一定的参考价值。

在没有子查询的情况下,join的优先级高。
比如:
select a.id,count(1) from a join b on a.id=b.id group by a.id
这种情况join的优先级高。
但是在有子查询的情况下比如:
select * from a join (select id,count(1) from b group by id) t on a.id=t.id
这种情况的话,group by 的优先级高,主要还是看情况。
总的来说join的优先级高一些,子查询是因为有()的作用。来自:求助得到的回答
参考技术A

join的优先级高,SELECT 语句处理顺序:

    FROM

    ON

    JOIN

    WHERE

    GROUP BY

    HAVING

    SELECT

    DISTINCT

    ORDER BY

参考技术B SQL中的优先级:join>where>group
但在select 列表中出现的未使用聚合函数的都要在group by 中出现,
如果不复合上述条件,SQL语法解析是会报错的(这和优先级无关)

mysql 使用 GROUP BY 时报错 ERROR 1055 (42000)

解决方法1:
SET sql_mode=(SELECT REPLACE(@@sql_mode,\'ONLY_FULL_GROUP_BY\',\'\'));
这种修改只是暂时性的,还是在 my.ini 文件中的sql-mode直接修改比较好。

解决方法2:
使用语句查询 sql_mode 的值再到 my.ini(windows)或my.cnf(linux)配置文件找到 sql-mode 中注释(去掉)only_full_group_by,加上刚才查询到的值。

以上是关于sql中 group by 的优先级高 还是 join的优先级高?的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?

sql语句有关where,group by,having的问题

oracle中,还是不甚明白order by和group by的用法

oracle中,还是不甚明白order by和group by的用法

partition by和group by的区别和对比

partition by和group by的区别和对比