2013-01-07 48 views
0

我試圖根據結果的數量在兩個select staments之間進行選擇。在以下case語句之外測試時,每個語句都會返回有效數據。Sql大小寫沒有返回值

SELECT CASE 
     WHEN Count(base.id) > 0 THEN base.id 
     ELSE (SELECT id 
       FROM tablea 
       WHERE pid = @val) 
     END 
FROM (SELECT id 
     FROM tablea 
     WHERE id = @val) AS base 

當base.Id> 0,則retuns正確,否則空當,而不是它應該從我的表7行

+0

你想返回null或其他7行? – bonCodigo

+0

這看起來異常複雜 - 爲什麼它不是簡單的'select'中的'WHERE id = @val或pid = @ val'? –

+0

OR返回所有適用的值。我只想要一個條件是真實的,id是主要條件。對不起,我不是很清楚 – user13186

回答

4

WHEN COUNT(base.id) >0總是正確的,因爲你的FROM過濾掉行其中id <> @val 。除非我誤解你想要什麼,下面給你想要的結果:

SELECT id    
FROM tablea 
WHERE id = @val OR pid = @val 

更新:

SELECT id    
FROM tablea 
WHERE id = @val OR (pid = @val 
AND NOT EXISTS (SELECT NULL FROM tablea WHERE id = @val)) 
+0

我只想要id = @val的行如果沒有我希望只返回行pid = @ val – user13186

+0

所以在ELSE的情況下,它執行一個新的查詢,使用不同的FROM子句 – user13186

+0

@ user13186檢查Alex07的[demo here](http://sqlfiddle.com/#!2/f6b68/1)..;)+1 Alex07。當[關鍵字搜索評論,問題,整個網站的答案已經準備就緒時,我會把你的答案放在精彩的文件夾中:]](http://meta.stackexchange.com/questions/148066/can-i-search-my -comments-using-some-keywords/161869#161869) – bonCodigo

1

這聽起來像你想選擇一個組行,或做​​不到這一點,第二組。一種方法是union兩套,然後選擇你想要的東西:

select id from (
    select id, 1 as Selector 
    from tablea 
    where id = @val 
    union 
    select id, 2 
    from tablea 
    where pid = @val) as Placeholder 
    where Selector = case when exists (select 42 from tablea where id = @val) then 1 else 2 end 

我假設id不能爲空。

+0

是的,你是正確的我正在尋找一套或其他,但由於表大小我由於每次找到兩個集合,恐怕工會查詢會花費太長時間。這是唯一的方法嗎? – user13186

+0

你可以簡單地做一個'if exists'(從tablea中選擇42,其中id = @val)'來決定執行哪個查詢,但是你似乎已經決定在一個膨脹的foop中執行它。 – HABO

+0

這一切都發生在一個選擇命令onPage加載和@val的值實際上是另一個嵌套查詢導致可怕的rutime。這雖然是一個很好的幫助。謝謝 – user13186