我有一个emp表的模式定义为emp(empno,ename,job,mgr,hiredate),我必须评估问题陈述的查询:
列出最近雇佣的员工在国王下工作的员工。
我将查询写成:
select hiredate from emp where hiredate < ANY
( select e.hiredate from emp e where e.mgr= (select e.empno from emp e
where e.ename='KING') order by hiredate desc )
此查询提供语法错误,请帮帮我。
答案 0 :(得分:1)
使用max函数 -
select hiredate
from emp
where hiredate < ( select max(hiredate)
from emp
where mgr= (select e.empno
from emp e
where e.ename='KING'));
答案 1 :(得分:0)
要让员工在过去7天加入的King
下工作,您可以尝试:
SELECT e.*
FROM emp e
WHERE e.mgr = (SELECT empno FROM emp WHERE ename='KING') AND
e.hiredate > DATEADD(day, -7, GETDATE())
请注意,查找King的员工编号的子查询不相关。所以这是友好的子查询。
答案 2 :(得分:0)
使用max来查找最大的雇用日期和连接而不是子查询。
select * from emp where hiredate <
(select max(e.hiredate)
from emp e
join emp mg on e.mgr = mg.empno
where mg.ename = 'KING')
我猜您有此错误消息
ORDER BY子句在视图,内联函数中派生无效 表,子查询和公用表表达式,除非TOP或FOR 还指定了XML。
所以你应该添加一个TOP 1
来使它工作(但是,这真的更具可读性吗?)
select hiredate from emp where hiredate < ANY
(select TOP 1 e.hiredate from emp e where e.mgr= (select e.empno from emp e
where e.ename='KING') order by hiredate desc )