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)
我是不是想错了,但是下面的sql不等于你想要实现的目标吗?
INSERT INTO MasterRecords(BatchRecordRecordID, SourceID, BatchID)
SELECT DISTINCT RecordID, 101, 150
FROM BatchRecords
WHERE BatchID = 150
;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3535 次 |
| 最近记录: |