在运行语句之前发布数据样本(当然只是一个样本)以及在运行语句之后发布所需的数据会很有帮助。
听起来你正在寻找类似的东西
INSERT INTO report( rpt_id, extension )
SELECT rpt_id, 'RTF'
FROM report
WHERE extension != 'RTF'
如果主键实际上是对rpt_id
and组合的复合约束extension
,并且您的目标是获取 N 个报告的表,每个报告的TXT
扩展rpt_id
名为.
SQL> create table report(
2 rpt_id number,
3 extension varchar2(3),
4 constraint extension_pk primary key( rpt_id, extension )
5 );
Table created.
SQL> insert into report values( 1, 'TXT' );
1 row created.
SQL> insert into report values( 2, 'TXT' );
1 row created.
SQL> insert into report values( 3, 'TXT' );
1 row created.
SQL> insert into report values( 4, 'TXT' );
1 row created.
SQL> insert into report values( 5, 'TXT' );
1 row created.
SQL> select * from report;
RPT_ID EXT
---------- ---
1 TXT
2 TXT
3 TXT
4 TXT
5 TXT
SQL> insert into report( rpt_id, extension )
2 select rpt_id, 'RTF'
3 from report
4 where extension != 'RTF';
5 rows created.
SQL> select * from report;
RPT_ID EXT
---------- ---
1 RTF
1 TXT
2 RTF
2 TXT
3 RTF
3 TXT
4 RTF
4 TXT
5 RTF
5 TXT
10 rows selected.
根据您收到的错误,显然主键未在 and 的组合上rpt_id
定义extension
。