查询在MySQL而不是Oracle中工作

查询在MySQL而不是Oracle中工作,sql,mysql,database,oracle,ora-00923,Sql,Mysql,Database,Oracle,Ora 00923,以下SQL语句适用于MySQL,但不适用于Oracle: SELECT *, MAX(COLUMN_A) FROM table_xyz WHERE COLUMN_A <= 100 GROUP BY COLUMN_A 选择*,最大值(A列) 来自表xyz 其中COLUMN_A这是因为Oracle要求您定义未包装在聚合函数中的所有列(MIN、MAX、COUNT等)。SQL Server将返回类似的错误 因为您的查询正在使用SELECT*,所以我无法为您正确地重新编写它。但我也不能

以下SQL语句适用于MySQL,但不适用于Oracle:

SELECT *, MAX(COLUMN_A) 
  FROM table_xyz 
 WHERE COLUMN_A <= 100 
GROUP BY COLUMN_A
选择*,最大值(A列)
来自表xyz

其中COLUMN_A这是因为Oracle要求您定义未包装在聚合函数中的所有列(MIN、MAX、COUNT等)。SQL Server将返回类似的错误

因为您的查询正在使用
SELECT*
,所以我无法为您正确地重新编写它。但我也不能保证语法正确的版本会返回与MySQL相同的结果。按您想要的最大值的同一列进行分组是很奇怪的…

如果您想要列a的最大值(),则根本不需要“分组依据”:

SELECT MAX(COLUMN_A) FROM table_xyz WHERE COLUMN_A <= 100 选择最大值(列A) 来自表xyz
其中列A有多个问题。您的GROUPBY子句是向后的。您需要通过*中的列定义组。还有OMG Ponies之前所说的。

除了其他人所说的之外,Oracle不允许在查询中将
*
与显式列定义混合使用:

SQL> select *, table_name from user_tables;
select *, table_name from user_tables
        *
ERROR at line 1:
ORA-00923: FROM keyword not found where expected

Oracle甚至没有考虑到这样一个事实,即您试图获取
GROUPBY
子句中包含的列之外的列。正如其他人所说,Oracle不会这样做。

这并不能解决您的MAX问题,但在其他列中使用“*”的唯一方法是使用表别名的显式引用,例如

 SELECT e.*, zip_code
 FROM  addresses a,
       employees e
 WHERE e.addressId = a.Id

对于最大值,您需要按照所有其他列进行分组,或者查看分析函数(以前有很多关于堆栈溢出的答案)。

正确。你必须调整这个查询。你能描述一下你真正想要达到的目标吗。这句话根本没有意义,实际上除了MySQL之外,所有的数据库管理系统都会拒绝运行这样的查询。MySQL只是返回不确定的结果。实际上,该语句不正确,我们不是按列_A分组,而是按另一列分组。实际上,我们想要的是这个
SELECT*,MAX(COLUMN_A)来自表_xyz,其中COLUMN_A@A_horse_与_no_name:no,SQLite支持MySQL支持的相同的“隐藏列”功能。但是任何真实的数据库,是的-你是对的。:)@Dave:用示例数据更新您的问题,从
DESC table_xyz
输出,以及预期输出。
 SELECT e.*, zip_code
 FROM  addresses a,
       employees e
 WHERE e.addressId = a.Id