我对sql语句中的优先级操作有疑问。例如:
SELECT t1.c2, COUNT(DISTINCT t2.c1) as count_c1 FROM t1 JOIN t2
WHERE t2.c2 > 1 GROUP BY t1.c2 HAVING count_c1 > 1;
首先应用此查询中的哪个过滤器,最后应用哪个过滤器。据我所知,HAVING中的条件将是最后一个,这意味着服务器生成完整的记录集,然后用count_c1<删除所有行。 1并将结果返回给客户端。 首先是WHERE下的条件,这意味着服务器甚至不会获得t2.c2< 1,但关于DISTINCT和GROUP BY的内容是什么?如果服务器将在GROUP BY之前从相反的情况(第一组GROUP BY和第二组DISTINCT)应用DISTINCT,则结果将不同。我在文档中找不到任何关于此的内容,可能是你帮助我。
答案 0 :(得分:1)
SQL中的优先级操作如下:
您已在MVA here
中了解相关信息答案 1 :(得分:0)
Frist,就像Thorsten Kettner所说,你的SQL语法实际上是无效的。其次,
我能够找到(source)的操作顺序如下:
- FROM子句(包括JOIN)
- WHERE子句
- GROUP BY子句
- HAVING条款
- SELECT条款
- ORDER BY子句
答案 2 :(得分:0)