Sto provando a scrivere un INSERT INTO che esegue un lavoro DISTINCT/GROUP BY. La query funziona perfettamente come un'istruzione select, ma non funzionerà se è racchiusa in INSERT INTO.La query GROUP BY valida non funziona se combinata con INSERT INTO su Oracle
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
Questo mi fa guadagnare:
SQL Error: ORA-00979: not a GROUP BY expression
Ma se rimuovere solo l'INSERT INTO codice, funziona perfettamente bene:
SELECT RecordID, SourceID, BatchID
FROM (
SELECT RecordID, BatchID, 101 AS SourceID
FROM BatchRecords
WHERE BatchID = 150
GROUP BY RecordID, BatchID
) BR
Risultati:
3 101 150
5 101 150
6 101 150
2 101 150
4 101 150
8 101 150
7 101 150
1 101 150
mio l'assunto è che GROUP BY non è consentito all'interno INSERIRE le istruzioni selezionate ma non riesco a trovare quasi nessuna documentazione a conferma di ciò.
Cosa succede se si esegue la selezione più interna da sola? (la tabella derivata non è realmente necessaria in ogni caso) Ricordo un bug in cui le clausole 'di gruppo by' non valide non erano riconosciute in una tabella derivata o in una sotto-selezione. Non ricordare i dettagli però. Inoltre, (non correlato): '150 AS BatchID' non ha senso se si utilizza' WHERE BatchID = 150' –
Funziona allo stesso modo se non viene reincartato con la selezione esterna. E il BatchID hard codificato è solo dalla mia area di lavoro, quella logica non è critica. –
Se si aggiunge RecordID al gruppo funziona? – xQbert