Tôi đang cố gắng viết INSERT INTO thực hiện công việc DISTINCT/GROUP BY. Truy vấn chạy hoàn toàn tốt như một câu lệnh chọn, nhưng sẽ không hoạt động nếu nó được bao bọc trong một INSERT INTO.Truy vấn GROUP BY hợp lệ không hoạt động khi được kết hợp với INSERT INTO trên 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
này kiếm được tôi:
SQL Error: ORA-00979: not a GROUP BY expression
Nhưng nếu tôi loại bỏ chỉ INSERT INTO mã, nó chạy hoàn toàn tốt đẹp:
SELECT RecordID, SourceID, BatchID
FROM (
SELECT RecordID, BatchID, 101 AS SourceID
FROM BatchRecords
WHERE BatchID = 150
GROUP BY RecordID, BatchID
) BR
Kết quả:
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 giả định là GROUP BY's không được phép bên trong INSERT INTO câu lệnh chọn nhưng tôi có thể tìm thấy gần như không có tài liệu nào xác nhận điều này.
Điều gì sẽ xảy ra nếu bạn chạy phần bên trong tự chọn nhất? (bảng dẫn xuất là không thực sự cần thiết anyway) Tôi nhớ lại một lỗi mà không hợp lệ 'nhóm by' điều khoản đã không được công nhận trong một bảng có nguồn gốc hoặc phụ chọn. Đừng nhớ chi tiết. Ngoài ra, (không liên quan): '150 AS BatchID' không thực sự có ý nghĩa nếu bạn sử dụng' WHERE BatchID = 150' –
Hoạt động tương tự nếu nó không được gói lại với lựa chọn bên ngoài. Và BatchID được mã hóa cứng chỉ là từ vùng đầu của tôi, logic đó không quan trọng. –
Nếu bạn thêm RecordID vào nhóm bằng cách nó hoạt động? – xQbert