如何修复 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的区别