Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL条件查询+控制流函数_Mysql - Fatal编程技术网

MySQL条件查询+控制流函数

MySQL条件查询+控制流函数,mysql,Mysql,MySQL:5.5.15-55 Percona服务器GPL,21.0版 我试图通过将一个值与其他三个值按顺序进行比较,从表中获取一个值。如果值='value1'停止,并使用该值,如果不是,则将其与'value2'进行比较,依此类推 伪查询: SELECT value FROM tbl_variable IF (WHERE object = 'value1') ELSE IF (WHERE object = 'value2') ELSE (WHERE object = 'default'); 我

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

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

伪查询:

SELECT value FROM tbl_variable
IF (WHERE object = 'value1')
ELSE IF (WHERE object = 'value2')
ELSE (WHERE object = 'default');
我想我可能需要使用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    |                |
根据绿妖的答案进行最终查询

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;

实例是java和C++的转换函数,它是比较同一对象和多个变量的if语句。p> 试试这个:

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
)


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

我不确定我是否理解。。。您只是想从tbl_变量中选择值,其中对象位于“value1”、“value2”、“default”中,还是除此之外还有其他内容?@stevenchambers否,我需要获得第一个匹配项。如果value1匹配,我不想再进行比较。仍在试图理解-找到匹配项时您想对其执行什么操作-只需按原样选择即可?@SteveChambers正确。如果比较匹配,我想从记录中选择一个名为“value”的字段并停止查询。啊,我明白了。看起来您现在已排序,但假设您的意思是发布查询中的值1/然后是值2/然后是默认值?选项2带有警告。它返回表中每个记录的值。与案例匹配的记录按预期返回-其余记录返回NULL。这是预期的吗?我只想返回匹配项的值。我明白了。你想要的是等价于C++切换和Rebug我想我已经明白了。将在几天后在问题中发布查询。请参阅更新的问题。我之前把WHERE-var_-name语句放在WHEN逻辑中。我把它从箱子里拿出来,现在它能用了。谢谢你的帮助!