简体   繁体   English

MySQL条件查询+控制流功能

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM