有条件的SQL查询
我有这个简单的查询有条件的SQL查询
select * from users where name = 'User1'
我想延长查询的功能,无论查询返回0记录查询将由其他条款获取数据。
where name = 'Default'
如果第一个子句将获取一些记录,第二个子句将被忽略。
编辑
甲骨文
SELECT * FROM users WHERE name = 'User1'
UNION ALL
SELECT * FROM users WHERE name = 'Default'
AND NOT EXISTS (SELECT 1 FROM users WHERE name='User1')
IF EXISTS (SELECT * from users where name = 'User1')
SELECT * from users where name = 'User1';
ELSE
SELECT * from users where name = 'Default';
迄今为止唯一的答案,在所有情况下都能给出正确的结果。 – 2010-08-17 09:06:20
除了在Oracle零售商 – Quassnoi 2010-08-17 09:06:49
@Quassnoi中不起作用,rdbms还没有被第一次指定。 :),@ mdma为oracle提供了正确的答案。 – 2010-08-17 09:17:13
select top 1 * from users where name in ('User1', 'Default') order by name desc
:P
我认为Oracle使用与“TOP”不同的东西。如果'name'有一个唯一的约束,这将工作。 – 2010-08-17 09:06:52
@Martin:我认为OP最初并未指定Oracle。 – 2010-08-17 09:08:05
@丹尼尔 - 是的,我没有倒下。 – 2010-08-17 09:09:33
WITH T AS (
SELECT users.*,
RANK() OVER (ORDER BY CASE WHEN name = 'User1' THEN 0 ELSE 1 END) AS RN
FROM users
WHERE name IN ('Default','User1')
)
SELECT * FROM T
WHERE RN = 1
SQL服务器? MySQL的?甲骨文?... – 2010-08-17 09:00:10