选择名称上的员工,如果不存在则选择dep选择dept的前1名员工

时间:2013-04-26 03:47:52

标签: sql sql-server tsql

我要求从employee表中获取记录namedepartment条件。如果该名称没有记录并离开,那么它应该从employee department返回前1条记录。

前:

SELECT * FROM EMPLOYEE WHERE NAME = 'SQL' AND DEPID = 1
 IF NOT EXISTS 
     SELECT TOP 1 * FROM EMPLOYEE WHERE DEPID = 1

这可以在单个查询中实现并考虑性能。

4 个答案:

答案 0 :(得分:1)

这应该适用于MS SQL:

SELECT TOP 1 *
FROM employee
WHERE depid = 1
ORDER BY CASE WHEN name = 'SQL' THEN 0 ELSE 1 END

对于PostgreSQL和MySQL,请使用:

SELECT * FROM employee
WHERE depid = 1
ORDER BY name != 'SQL'
LIMIT 1

为获得最佳性能,请在(depid, name)上创建复合(多列)索引。

答案 1 :(得分:1)

试试这个

SELECT TOP 1 * FROM EMPLOYEE WHERE DEPID = 1 AND 
NAME = CASE 
       WHEN EXISTS(SELECT 1 FROM EMPLOYEE WHERE DEPID = 1 AND NAME = 'SQL') 
       THEN 'SQL' ELSE NAME END

答案 2 :(得分:0)

select top 1 * from employee where depid = 1 and not exists (select * from employee where name = 'SQL' and depid = 1)
union all
select * from employee where name = 'SQL' and depid = 1

答案 3 :(得分:0)

我假设你正在使用SQL服务器。

一个简单的If存在其他逻辑将在这里工作。

If exists(SELECT 1 from employee WHERE ename='SQL' AND deptno=1)
SELECT * from employee WHERE name='SQL' AND deptno=1
else 
select top 1 * from empoyee where deptno=1