如何修复 INSERT INTO SELECT 组功能错误

Posted

技术标签:

【中文标题】如何修复 INSERT INTO SELECT 组功能错误【英文标题】:How to fix INSERT INTO SELECT group function error 【发布时间】:2021-12-01 19:50:26 【问题描述】:

我现在正在学习 oracle SQL,但我遇到了一个问题,我必须使用 INSERT INTO SELECT 语句来根据查询填充表。我需要在表格中填充与收入低于公司平均工资并至少从事两个项目的员工相关的信息。下面是我正在使用的表格和我的代码,请告诉我哪里出了问题,因为我的当前代码按功能分组错误。谢谢!

表格:

Division(DID、dname、managerID) Employee(empID、姓名、薪水、DID) Workon(PID、EmpID、小时) Promotion_list(empID、姓名、薪水、部门名称)

代码:

insert into Promotion_list
    select e.empid, e.name, e.salary, d.dname
    from employee e 
    inner join division d on e.did = d.did 
    inner join workon w on w.empid = e.empid
    where e.salary < (select avg(salary) from employee) 
      and count(w.pid) >= 2

【问题讨论】:

count(*) 是一个聚合函数。您需要某个地方的群组您阅读过 GROUP BY 吗? 【参考方案1】:

Count 函数不能在where 中,但可以在having 子句中,这意味着您还需要group by 所有非聚合列。

类似这样的:

insert into Promotion_list (empID, name, salary, divisionName)
  select e.empid, e.name, e.salary, d.dname
  from employee e inner join division d on e.did = d.did 
                  inner join workon w   on w.empid = e.empid
  where e.salary < (select avg(salary) from employee) 
  group by e.empid, e.name, e.salary, d.dname
  having count(w.pid) >= 2

我不知道它是否会返回您期望的结果,但 - 至少 - 不应该引发错误。

【讨论】:

以上是关于如何修复 INSERT INTO SELECT 组功能错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SQL INSERT INTO SELECT 与 codeigniter 一起使用

Oracle中insert into select和select into的区别

Oracle中insert into select和select into的区别

如何修复此 SELECT 语句中的错误 INTO 子句

如何使用 PrepareStatement 在 Java 中执行 INSERT SELECT INTO

Oracle中insert into select和select into的区别