Search code examples
sqloracle-databaseoracle12c

Valid GROUP BY query doesn't work when combined with INSERT INTO on Oracle


I'm trying to write an INSERT INTO that does a some DISTINCT/GROUP BY work. The query runs perfectly fine as a select statement, but will not work if it's wrapped into an 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

This earns me:

SQL Error: ORA-00979: not a GROUP BY expression

But if I remove just the INSERT INTO code, it runs perfectly fine:

SELECT RecordID, SourceID, BatchID
FROM (
    SELECT RecordID, BatchID, 101 AS SourceID
    FROM BatchRecords
    WHERE BatchID = 150
    GROUP BY RecordID, BatchID
) BR

Results:

3   101 150
5   101 150
6   101 150
2   101 150
4   101 150
8   101 150
7   101 150
1   101 150

My assumption is that GROUP BY's are not allowed inside INSERT INTO select statements but I can find almost no documentation confirming this.


Solution

  • Am I thinking wrong, but is not the sql below equal what you want to achieve?

    INSERT INTO MasterRecords(BatchRecordRecordID, SourceID, BatchID)
    SELECT DISTINCT RecordID, 101, 150
    FROM BatchRecords
    WHERE BatchID = 150
    ;