我正在尝试编写一个 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
这让我赚到:
SQL Error: ORA-00979: not a GROUP BY expression
但是如果我只删除 INSERT INTO 代码,它运行得非常好:
SELECT RecordID, SourceID, BatchID
FROM (
SELECT RecordID, BatchID, 101 AS SourceID
FROM BatchRecords
WHERE BatchID = 150
GROUP BY RecordID, BatchID
) BR
结果:
3 101 150
5 101 150
6 101 150
2 101 150
4 101 150
8 101 150
7 101 150
1 101 150
我的假设是在 INSERT INTO select 语句中不允许使用 GROUP BY,但我几乎找不到任何文件证实这一点。
最佳答案
我来到这里试图解决类似的情况,所以在我看来,这种问题仍然存在。
就我而言,避免任何优化器转换,成功了。
我将 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
关于sql - 在 Oracle 上与 INSERT INTO 结合使用时,有效的 GROUP BY 查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28354248/