2013-07-15 47 views
0

我請教這個頁面:http://dev.mysql.com/doc/refman/5.1/en/case.html以及這一個,但不能得到一個簡單的程序工作....MYSQL存儲過程,情況


UPDATE: 要clearify我想做的事:我想選擇表中的所有行,其中的字段id是1,0或者可以是其中任何一個。這是通過一個輸入參數的程序,這需要值指定0,1或2

所以如果_id = 0 I想: SELECT * FROM TABLE其中id = 0

如果_id = 1個I想: SELECT * FROM表其中id = 1

如果_id = 2我想: SELECT * FROM表其中id在(0,1)

我希望我能得到它的休息如果我只有下面的簡單病例陳述才能工作,請自行工作......


我想要做的是一樣的東西:

begin 
    select * from TABLE where 
     case _id 
     when 0 then id=0 
     else id = 1 
     end as id 
end 

這給誤差「你在你的SQL語法錯誤」。

我也試過:

begin 
    select * from TABLE where 
     case _id 
     when 0 then id=0 
     else id=1 
     end case 
end 

這給了同樣的錯誤。顯然我的地方有錯誤的語法,但我無法弄清楚......哪裏有人能幫我解決問題?

感謝, 尼克拉斯

+0

你想做什麼? 'WHERE'用於選擇行,爲什麼你有一個變量賦值呢? – Barmar

+0

如果我正確理解你的問題,你的第一次嘗試是接近。試試'select * from table where id = case _id when 0 then 0 else 1 end'。 –

+0

所以,我想 開始 \t SELECT * FROM表其中id =情況下_if 0時0,然後還有1 結束 主要生產:「MySQL的錯誤號1064 - 你在你的SQL語法錯誤.... .....「 –

回答

0

試試這個:

begin 
    select *, 
     case _id 
     when 0 then 0 
     else 1 
     end as id 
    from table 
end 

當作爲SELECT查詢的一部分使用,WHEN不是一份聲明中,這是一個control flow function

你也可以使用這個爲:

begin 
    select *, _id != 0 as id 
    from table 
end 
0

構建查詢到這個樣子...... MySQL的情況下,有從C和Java不同的語法...

set @input=2; 

select * from foo 
where 
    case when @input =2 then value in (1, 0) else 
     value = @input end; 

live demo with sql fidle

+0

謝謝!我將在明天訪問數據庫時嘗試,並告訴您是否解決了我的問題。 –

+0

解決了它,但我更喜歡下面的答案。不管怎麼說,還是要謝謝你! –