MySQL条件查询+控制流函数

时间:2013-03-13 13:45:13

标签: mysql

MySQL:5.5.15-55 Percona Server(GPL),版本21.0

我试图通过将表与其他三个值(按顺序)进行比较来从表中获取值。如果value ='value1'停止,并使用该值,如果不将其与'value2'进行比较,依此类推。

伪查询:

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

我想我需要使用Control Flow Function(Case可能是?),但我在理解语法方面遇到了问题。

修改

表格结构

| 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    |                |

基于Green Demon答案的最终查询。

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;

1 个答案:

答案 0 :(得分:1)

CASE几乎是java和c ++的“switch”函数,它是用于将同一对象与多个变量进行比较的“if”语句。 。

试试这个:

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

或者,CASE可以用作“IF”函数

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

编辑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

第一个条件仅返回非空值,而限制1表示在第一个有效记录处停止。