0

MySQL:5.5.15-55 Percona 服务器 (GPL),版本 21.0

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

伪查询:

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

我想我需要使用控制流函数(可能是案例?),但我在理解语法时遇到了问题。

编辑

表结构

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

1 回答 1

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

;

第一个条件只返回非空值,limit 1 表示在第一个有效记录处停止。

于 2013-03-13T13:49:07.480 回答