与Oracle上的INSERT INTO结合使用时,有效的GROUP BY查询不起作用

Tom*_*day 10 sql oracle oracle12c

我正在尝试编写INSERT INTO来执行一些DISTINCT/GROUP BY工作.该查询作为select语句运行完全正常,但如果将其包装到INSERT INTO中则无效.

INSERT INTO MasterRecords
  (BatchRecordRecordID, SourceID, BatchID)
SELECT RecordID, SourceID, BatchID
FROM (
    SELECT RecordID, BatchID, 101 AS SourceID
    FROM BatchRecords
    WHERE BatchID = 150
    GROUP BY RecordID, BatchID
) BR
Run Code Online (Sandbox Code Playgroud)

这让我有所收获:

SQL错误:ORA-00979:不是GROUP BY表达式

但是,如果我只删除INSERT INTO代码,它运行完全正常:

SELECT RecordID, SourceID, BatchID
FROM (
    SELECT RecordID, BatchID, 101 AS SourceID
    FROM BatchRecords
    WHERE BatchID = 150
    GROUP BY RecordID, BatchID
) BR
Run Code Online (Sandbox Code Playgroud)

结果:

3   101 150
5   101 150
6   101 150
2   101 150
4   101 150
8   101 150
7   101 150
1   101 150
Run Code Online (Sandbox Code Playgroud)

我的假设是在INSERT INTO select语句中不允许GROUP BY,但我几乎找不到确认这一点的文档.

abr*_*taf 10

我来到这里试图解决类似的情况,所以在我看来,这种问题仍然存在。

就我而言,避免任何优化器转换,成功了。

我将 NO_QUERY_TRANSFORMATION 提示应用于“intoed” SELECT 语句,错误消失了。

在这个问题的情况下,我应该将其重写为:

INSERT INTO MasterRecords
  (BatchRecordRecordID, SourceID, BatchID)
SELECT /*+NO_QUERY_TRANSFORMATION*/ RecordID, SourceID, BatchID
FROM (
    SELECT RecordID, BatchID, 101 AS SourceID
    FROM BatchRecords
    WHERE BatchID = 150
    GROUP BY RecordID, BatchID
) BR
Run Code Online (Sandbox Code Playgroud)


MrS*_*ind 3

我是不是想错了,但是下面的sql不等于你想要实现的目标吗?

INSERT INTO MasterRecords(BatchRecordRecordID, SourceID, BatchID)
SELECT DISTINCT RecordID, 101, 150
FROM BatchRecords
WHERE BatchID = 150
;
Run Code Online (Sandbox Code Playgroud)