基于if的MySQL where语句

3

你好,我正在根据以下逻辑编写MySQL语句。

Select * from content 
if(description=='educational')
where serial like '%EDU2015%'
else where serial like '%NOVEL2015%'

逻辑很简单,如果描述列是教育相关的,则筛选器应该有字符串"EDU2015"。否则,它应该使用序列号"NOVEL2015"进行筛选。
我不确定是否在mysql中正确使用IF语句,但我不知道从哪里放置where语句。https://dev.mysql.com/doc/refman/5.7/en/if.html

尝试使用案例:http://dev.mysql.com/doc/refman/5.0/en/case.html - Mikey
尝试使用case语句,并将您的逻辑分成不同的情况。 - Uzumaki Naruto
3个回答

5
您可以像这样使用CASE表达式:
SELECT * FROM content
WHERE serial like CASE WHEN description = 'educational'
                       THEN '%EDU2015%'
                       ELSE '%NOVEL2015%'
                  END

请注意,当您比较值时,需要使用单个等号而不是两个。
编辑:如果您想根据条件在不同列上进行筛选,则可以使用以下方法:
SELECT * FROM content
WHERE (description = 'educational' and  serial like '%EDU2015%')
    OR(description <> 'educational' and id>100)

@UzumakiNaruto 实际上,CASE 是 ANSI SQL 的一部分,因此我认为所有版本都支持它。 - sagi
谢谢!它有效。但是如果我需要不同的筛选器来满足不同的条件怎么办呢? 比如说。选择*从内容中 如果(描述==“教育”) 其中序列号类似于'%EDU2015%' 否则,其中ID>100 - cattarantadoughan

5
您可以在WHERE语句块中使用IF,例如:
Select * 
from content 
where serial like IF(description = 'educational','%EDU2015%','%NOVEL2015%');

另外你也可以像@sagi所说的那样选择使用CASE WHEN表达式。

输入图像描述

mysql> SELECT IF(1>3,'true','false');
+------------------------+
| IF(1>3,'true','false') |
+------------------------+
| false                  | 
+------------------------+
1 row in set (0.00 sec)

1

这也是可以的

Select * from content 
where if(description = 'educational', serial like '%EDU2015%', serial like '%NOVEL2015%');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接