ORA-00979: 不是 Oracle 的 GROUP BY 表达式但在子句差异上下文中对 MySQL 无效
ORA-00979: not a GROUP BY expression for Oracle but not valid for MySQL in context of clause difference
我在 Oracle 运行 中有这个查询
select studentid, attndmark
from attendance_master m,
attendance_detail d
where m.attnid = d.attendid
group by studentid
并得到错误:
ORA-00979: not a GROUP BY expression
错误很好,我知道 select 子句中列列表的问题。但类似查询在 MySQL.
中有效
SELECT aff.akey, username
FROM `affiliates` aff,
affstats ast
WHERE aff.akey = ast.akey
group by aff.akey
我需要一个可以在 RDBMS Oracle/ Mysql 和 MSSQL 上 运行 的查询技巧。
有什么诀窍?
MySQL 是错误的,因为它不符合 SQL 标准(在这种情况下甚至是常识)。它允许 SELECT
中的列不是聚合函数的参数并且不在 GROUP BY
中。文档明确指出这些值来自 "indeterminate" 行。
顺便说一下,您应该学习正确的显式 JOIN
语法。查询可以写成:
SELECT aff.akey, MAX(username)
FROM affiliates aff JOIN
affstats ast
ON aff.akey=ast.akey
GROUP BY aff.akey;
这将适用于两个数据库。
我在 Oracle 运行 中有这个查询
select studentid, attndmark
from attendance_master m,
attendance_detail d
where m.attnid = d.attendid
group by studentid
并得到错误:
ORA-00979: not a GROUP BY expression
错误很好,我知道 select 子句中列列表的问题。但类似查询在 MySQL.
中有效SELECT aff.akey, username
FROM `affiliates` aff,
affstats ast
WHERE aff.akey = ast.akey
group by aff.akey
我需要一个可以在 RDBMS Oracle/ Mysql 和 MSSQL 上 运行 的查询技巧。
有什么诀窍?
MySQL 是错误的,因为它不符合 SQL 标准(在这种情况下甚至是常识)。它允许 SELECT
中的列不是聚合函数的参数并且不在 GROUP BY
中。文档明确指出这些值来自 "indeterminate" 行。
顺便说一下,您应该学习正确的显式 JOIN
语法。查询可以写成:
SELECT aff.akey, MAX(username)
FROM affiliates aff JOIN
affstats ast
ON aff.akey=ast.akey
GROUP BY aff.akey;
这将适用于两个数据库。