[英]MySQL Conditional Query + Control Flow Functions
MySQL: 5.5.15-55 Percona Server (GPL), Release 21.0 MySQL:5.5.15-55 Percona服务器(GPL),版本21.0
I'm trying to grab a value from a table by comparing it to three other values (in order). 我正在尝试通过将其与其他三个值(按顺序)进行比较来从表中获取一个值。 If the value = 'value1' stop, and use that value, if not compare it to 'value2' and so on. 如果value ='value1'停止,则使用该值,如果未将其与'value2'比较,以此类推。
Pseudo-query: 伪查询:
SELECT value FROM tbl_variable
IF (WHERE object = 'value1')
ELSE IF (WHERE object = 'value2')
ELSE (WHERE object = 'default');
I think I need to use a Control Flow Function (Case maybe?), but I'm having issues understanding the syntax. 我认为我需要使用控制流功能 (可能是Case?),但是在理解语法时遇到了问题。
EDIT 编辑
Table structure 表结构
| 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 | |
Final query based on Green Demon's answer. 根据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;
CASE is pretty much the "switch" function of java and c++, which is the "if" statement for comparing the same object against multiple variables. CASE几乎是Java和C ++的“切换”功能,它是用于将同一对象与多个变量进行比较的“ if”语句。 . 。
Try this: 尝试这个:
SELECT CASE object WHEN 'value1' THEN 'value1'
WHEN 'value2' THEN 'value2'
ELSE 'value3' END;
Alternatively, CASE can be used as the "IF" function 或者,可以将CASE用作“ IF”功能
SELECT CASE WHEN object = 'value1' THEN 'value1'
WHEN object = 'value2' THEN 'value2'
ELSE 'value3' END;
EDIT 1: try 编辑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
; ;
The first condition returns only values that are not null, and limit 1 says to stop at first valid record. 第一个条件仅返回不为null的值,并且限制1表示在第一条有效记录处停止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.