Oracle SQL:如何在具有标识列的表上插入带有GROUP BY子句的SELECT语句?
在一个应用程序中,我打算截断和插入Oracle 12c数据库,但在标识列中发现了这个问题。即使插入。。。SELECT语句适用于我尝试过的大多数SELECT用法,当该语句还有GROUPBY子句时,它无法工作,发出ORA-00979:not GROUPBY expression投诉。下面是一些示例代码:Oracle SQL:如何在具有标识列的表上插入带有GROUP BY子句的SELECT语句?,sql,database,oracle,Sql,Database,Oracle,在一个应用程序中,我打算截断和插入Oracle 12c数据库,但在标识列中发现了这个问题。即使插入。。。SELECT语句适用于我尝试过的大多数SELECT用法,当该语句还有GROUPBY子句时,它无法工作,发出ORA-00979:not GROUPBY expression投诉。下面是一些示例代码: create table aux ( owner_name varchar2(20), pet varchar2(20) ); insert into aux values ('Scott',
create table aux (
owner_name varchar2(20),
pet varchar2(20) );
insert into aux values ('Scott', 'dog');
insert into aux values ('Mike', 'dog');
insert into aux values ('Mike', 'cat');
insert into aux values ('John', 'turtle');
create table T1 (
id number generated always as identity,
owner_name varchar2(20),
pet_count number
);
insert into T1 (owner_name, pet_count)
select owner_name, count(*) as pet_count from aux group by owner_name;
select owner_name, count(*) as pet_count from aux group by owner_name;
它在第一次插入时工作,但在下一次插入时失败
编辑:我修改了代码,这样问题更容易理解,同时仍然可以重现
谢谢你的帮助 在Oracle社区,这个问题已经得到了回答。 引用原始答案时,请记住,没有记录具体化提示。
谢谢大家的帮助 如果使用select*from select“Scott”from dual group by 1,是否有效?标识列类似于序列,并且无论如何都是不同的,在标识列上分组的业务要求是什么?我已经尝试过封装的select,但问题仍然存在@vishad我希望在其他列上分组,而不是在标识上分组,以便为其他列提供一个条目,然后将此条目与标识一起传递到新表。group BY 1的语法无效。使用GROUP BY名称。它们是相同的,只是为了表明问题不在GROUP BY代码中,而是在它与insert本身的交互中。同时运行这两个命令,您可以看到selectstatement有效,但insert无效。
insert into T1 (owner_name, pet_count)
with t as (select /*+ materialize */ owner_name, count(*) as pet_count from aux group by owner_name)
select owner_name, pet_count from t