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;
答案 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表示在第一个有效记录处停止。