【问题标题】:IF... ELSE in WHERE clause MySQLIF...ELSE 在 WHERE 子句 MySQL
【发布时间】:2013-03-18 23:17:31
【问题描述】:

我试图在 MySQL WHERE 语句中使用 IF...ELSE 函数但没有成功。

我有这个问题:

SELECT id 
FROM mytable 
WHERE restrcountry NOT LIKE '%*nl*%' 
  AND (IF languages LIKE '%*nl*%', 1, 0) = 1;

好的,这是我的 IF 语句查询。

但是,我怎样才能同时使用“ELSE”?

例如,我想做类似的事情:

IF 语言匹配 nl ---> 选择语言为 nl

的 id 字段

ELSE IF language NOT match nl ---> 选择语言为 en

的 id 字段

请问如何在 MySQL 查询中执行此操作?

谢谢大家!

【问题讨论】:

  • 您能否发布一些示例数据以及查询的预期结果?
  • 什么是select id field where language is nl

标签: mysql if-statement


【解决方案1】:

IF 的语法是:

 IF(test_expr, then_expr, else_expr)

因此您可以执行类似IF(test1, result1, IF(test2, result2, else_result)) 的操作,但它的可读性不强,因此有CASE 表达式用于此目的。

CASE WHEN  test1 THEN result1
WHEN test2 THEN result2
ELSE else_result END

如果要对选择列进行条件处理,可以直接在选择字段中使用IF

SELECT IF(match, nl_column en_column) AS lang 
FROM table

注意 where 子句中的表达式要么是TRUE 要么是FALSE,所以写成

IF(expr, TRUE, FALSE)

相同
expr

【讨论】:

    【解决方案2】:

    改用 CASE

    CASE
        WHEN languages LIKE '%*nl*%' THEN 1 
        WHEN languages NOT LIKE '%*nl*%' THEN 0
     END as languages 
    

    【讨论】:

      猜你喜欢
      • 2020-12-13
      • 1970-01-01
      • 2016-03-20
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      相关资源
      最近更新 更多