需將 SELECT COUNT(*) FROM test3 的統計結果(如 8 條)插入到另一張表 sum_table 中。嘗試使用 INSERT INTO sum_table SELECT COUNT(*) FROM test3 但發現插入的值為 1 而非 8。
INSERT INTO table SELECT ... 語法要求 SELECT 列表的列數、類型與目標表結構完全匹配。若目標表 sum_table 有多列(如 id, cnt, create_time),而 SELECT 僅返回一列聚合值,數據庫可能隱式插入默認值或報錯,導致結果不符預期。題主描述「插入的是 1」可能是因為目標表有自增 ID 列,實際統計值未正確寫入目標列。
顯式指定目標列名,確保一一對應:
-- 假設 sum_table 結構:id (PK), total_count (NUMBER), stat_date (DATE)
INSERT INTO sum_table (total_count, stat_date)
SELECT COUNT(*), SYSDATE FROM test3;
INSERT INTO dept_salary_summary (dept_id, avg_sal, emp_cnt)
SELECT d.dept_id, AVG(e.sal), COUNT(*)
FROM emp e JOIN dept d ON e.dept_id = d.dept_id
GROUP BY d.dept_id;
INSERT INTO high_salary_emps (emp_id, sal)
SELECT emp_id, sal FROM emp WHERE sal > 5000;
若需「存在則更新,不存在則插入」:
MERGE INTO sum_table t
USING (SELECT COUNT(*) AS cnt FROM test3) s
ON (t.stat_date = TRUNC(SYSDATE))
WHEN MATCHED THEN UPDATE SET t.total_count = s.cnt
WHEN NOT MATCHED THEN INSERT (stat_date, total_count) VALUES (TRUNC(SYSDATE), s.cnt);
INSERT INTO table (col1, col2...) 目標列,避免表結構變更導致錯誤。/*+ APPEND */ 提示或 BULK COLLECT 提升性能。