【发布时间】:2016-09-02 16:18:07
【问题描述】:
不要评判我,我是 SQL 查询的新手。我得到了方案,如下图所示。因此,有 2 个表,第一个员工包含 EmployeeID、FirstName、LastName、DateOfBirth 和 DepartmentID。第二个称为 Department ,包含 DepartmentID 和 DepartmentName 。
我想返回包含超过 20 名员工的每个部门中最年长的员工的 FirstName、LastName 和 DepartmentName。
我的解决方案是以下查询:
SELECT FirstName, LastName, DepartmentName
FROM employees
LEFT JOIN department
ON employees.DepartmentID = department.DepartmentID
WHERE (employees.DateOfBirth =
(SELECT MIN(employees.DateOfBirth ) FROM (
SELECT *FROM employees WHERE employees.DepartmentID IN (
SELECT employees.DepartmentID FROM employees GROUP BY DepartmentID HAVING COUNT(*) > 20)));
我认为这个逻辑很好,因为内部SELECT 语句将返回每个员工人数超过 20 人的部门的 ID,而外部应该返回最老的员工。
我遇到的问题是,当我尝试执行此查询时,它返回SQL error 每个派生表都必须有自己的别名。
我尝试在每个派生表上放置别名,但结果仍然相同。
请帮我解决这个问题。
另外,如果有人有不同的解决方案,请分享。
谢谢。
草莓要求的加法,Create查询
CREATE TABLE Employees
(
EmployeeID int,
FirstName varchar(10),
LastName varchar(15),
DateOfBirth date,
DeparmentID int
)
CREATE TABLE Department
(
DepartmentID int,
DepartmentName varchar(15)
)
【问题讨论】:
-
哇,年龄歧视查询 - SO 上的第一个
-
如果派生表需要别名,请给它一个别名!就是这么简单。也就是说,这是一个丑陋的查询。
-
该吃午饭了 - 评论已删除
-
因为 MIN() 将返回最早的出生日期
-
如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 CREATE 和 INSERT 语句(和/或 sqlfiddle),以便我们可以更容易复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。