2013-03-13 27 views
0

MySQL的:5.5.15-55的Percona服務器(GPL),通過比較其他三個值21.0版MySQL的條件查詢+控制流程函數

我想抓住從表中的值(以)。如果value ='value1'停止,並使用該值,則不將其與「value2」進行比較,依此類推。

僞查詢:

SELECT value FROM tbl_variable 
IF (WHERE object = 'value1') 
ELSE IF (WHERE object = 'value2') 
ELSE (WHERE object = 'default'); 

我想我需要使用Control Flow Function,但我有問題的理解語法(也許案例?)。

編輯

表結構

| Field  | Type    | Null | Key | Default | Extra   | 
+-------------+------------------+------+-----+---------+----------------+ 
| id   | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| var_name | varchar(50)  | NO |  |   |    | 
| object  | varchar(102)  | YES | MUL | NULL |    | 
| value  | text    | NO |  | NULL |    | 

最終查詢基於綠色惡魔的答案。

SELECT (CASE 
WHEN object = 'value1' THEN value 
WHEN object = 'value2' THEN value 
WHEN object = 'default' THEN value 
END) 
AS value 
FROM tbl_variables 
WHERE value IS NOT NULL 
AND var_name = 'NAME' 
LIMIT 1; 
+0

不知道我明白了......你只是想'從tbl_variable WHERE對象IN('value1','value2','default')''或者還有更多的東西嗎? – 2013-03-13 13:48:47

+0

@SteveChambers不,我需要得到第一場比賽。如果value1匹配,我不想再比較。 – 2013-03-13 14:01:04

+0

仍試圖理解 - 當找到匹配時,您想如何處理它 - 只是按原樣進行「選擇」? – 2013-03-13 14:07:41

回答

1

CASE幾乎是java和C++的「開關」功能,它是用於將同一對象與多個變量進行比較的「if」語句。 。

嘗試這種情況:

SELECT CASE object WHEN 'value1' THEN 'value1' 
WHEN 'value2' THEN 'value2' 
ELSE 'value3' END; 

或者,情況下,可以用作 「IF」 功能

SELECT CASE WHEN object = 'value1' THEN 'value1' 
WHEN object = 'value2' THEN 'value2' 
ELSE 'value3' END; 

EDIT 1:嘗試

SELECT (CASE WHEN object = 'value1' THEN 'value1' 
WHEN object = 'value2' THEN 'value2' 
ELSE 'value3' END) AS returnVal 
WHERE returnVal IS NOT NULL 

LIMIT 1 

;

第一個條件只返回非空值,而第一個條件表示停止在第一個有效記錄。

+0

選項2與注意事項一起使用。它返回表中每個記錄的值。匹配一個案例的記錄按預期返回 - 其餘的返回NULL。這是預期的嗎?我只想返回匹配值的值。 – 2013-03-13 14:16:06

+0

我明白了。你想要的是相當於C++開關和中斷 – 2013-03-13 14:21:15

+0

嘗試我的新代碼 – 2013-03-13 14:32:12