我正在尝试将MySQL 5.0视图迁移到Oracle 12c。这是我在MySQL中的语法:
select count(`table1`.`uuid`) AS `Count`,
`table2`.`description` AS `STATUS`,
`table3`.`name` AS `Court`
from ((`table2` join `table1`)
join `table3`)
where ((`table1`.`statusCode` = `table2`.`code`)
and (`table3`.`uuid` = `table1`.`courtUuid`))
group by `table1`.`courtUuid`,`table2`.`description`;
这是我对Oracle 12c的语法:
select count(table1.uuid) AS Count,
table2.description AS STATUS,
table3.NAME as Court
from table2
join table1
on (table1.statuscode = table2.code)
join table3
on (table3.uuid = table1.courtuuid)
group by table1.courtuuid,table2.description;
当我运行Oracle 12c语法时,我得到:
ORA-00979:不是GROUP BY表达式
00979. 00000 - “不是GROUP BY表达式”
*原因:
*行动:
行错误:3列:1
但是,如果我将table3.NAME添加为group by的一部分,我会得到866行。 MySQL中的查询产生1025行。
select count(table1.uuid) AS Count,
table2.description AS STATUS,
table3.NAME as Court
from table2
join table1
on (table1.statuscode = table2.code)
join table3
on (table3.uuid = table1.courtuuid)
group by table1.courtuuid,table2.description,table3.NAME;
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
你可能想要:
select count(table1.uuid) AS Count,
table2.description AS STATUS,
table3.NAME as Court
from table2 join
table1
on table1.statuscode = table2.code join
table3
on (able3.uuid = table1.courtuuid
group by table3.name, table2.description;
select
中的未聚合列应位于group by
中。不幸的是,MySQL有一个(错误的)功能,不需要这种逻辑。
严格来说,你也可以这样做:
select count(table1.uuid) AS Count,
table2.description AS STATUS,
max(table3.NAME) as Court
from table2 join
table1
on table1.statuscode = table2.code join
table3
on table3.uuid = table1.courtuuid
group by table1.courtuuid, table2.description;
这更类似于您的查询,但第一个版本可能就是您想要的。