SQL学习笔记——Unknown column xxx in having clause
代碼1:
select DepartmentId from Employee group by DepartmentId having Salary=max(Salary);報(bào)錯(cuò):
Unknown column 'XXXX' in 'having clause原因:
表根據(jù)Department將表的數(shù)進(jìn)行分組,在執(zhí)行Salary=max(Salary)這一句時(shí),max(Salary)選出每一組最大的Salary,但是等號(hào)左邊的Salary,并不知道指定的是哪一行的數(shù)據(jù),因此會(huì)報(bào)錯(cuò)。
代碼2:
select d.Name as Department,Employee.Name as Employee,Employee.Salary from Department as d,Employee where d.Id=Employee.DepartmentId and d.Id in (select Employee.DepartmentId from Employeegroup by DepartmentIdhaving Salary = max(Salary));在執(zhí)行上面的子查詢時(shí),同樣是?Salary = max(Salary),卻可以執(zhí)行成功。是因?yàn)殡m然沒(méi)有指定,但是這里的Salary是指的外層查詢傳進(jìn)來(lái)的數(shù)據(jù)。根據(jù)SQL語(yǔ)句的執(zhí)行順序,上面的代碼,先執(zhí)行from語(yǔ)句,分別從Department表和Employee表中選出一條數(shù)據(jù),傳遞進(jìn)入子查詢中。having子句中,雖然沒(méi)有指定Salary來(lái)自哪里,這里應(yīng)該默認(rèn)是指?jìng)鬟M(jìn)來(lái)的數(shù)據(jù)。代碼改成下面的樣子應(yīng)該更好理解一點(diǎn)。
代碼3:
select d.Name as Department,e.Name as Employee,e.Salary from Department as d,Employee as ewhere d.Id=e.DepartmentId and d.Id in (select Employee.DepartmentId from Employeegroup by DepartmentIdhaving e.Salary = max(Salary));兩者的代碼執(zhí)行結(jié)果是相同的,但代碼3更能直觀的看出,每條數(shù)據(jù)來(lái)自哪里。?
總結(jié)
以上是生活随笔為你收集整理的SQL学习笔记——Unknown column xxx in having clause的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 声卡、显卡驱动更新
- 下一篇: 最方便的在线Oracle SQL学习环境