我有這個簡單的查詢有條件的SQL查詢
select * from users where name = 'User1'
我想延長查詢的功能,無論查詢返回0記錄查詢將由其他條款獲取數據。
where name = 'Default'
如果第一個子句將獲取一些記錄,第二個子句將被忽略。
編輯
甲骨文
我有這個簡單的查詢有條件的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