我要求从employee
表中获取记录name
和department
条件。如果该名称没有记录并离开,那么它应该从employee
department
返回前1条记录。
前:
SELECT * FROM EMPLOYEE WHERE NAME = 'SQL' AND DEPID = 1
IF NOT EXISTS
SELECT TOP 1 * FROM EMPLOYEE WHERE DEPID = 1
这可以在单个查询中实现并考虑性能。
答案 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