mysql - 为什么这个 MySQL CASE 查询不起作用?

标签 mysql case

我是个新手,以前从未使用过案例,所以请不要笑。

为什么这个查询不起作用?

  SELECT * 
    FROM `cronjob_reloaded` 
   WHERE `carid` LIKE '%bmw%'
      OR `age` BETWEEN '10' AND '15'
ORDER BY 
  CASE WHEN `carid` LIKE '%bmw%' = 1 
       THEN 1 
  CASE WHEN `age` BETWEEN '10' AND '15' = 2 
       THEN 2

我收到此错误:

Check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE WHEN age BETWEEN '10' AND '15' =2 THEN 2

最佳答案

你的语法有点奇怪。在 LIKE 情况下,您不需要 = 1,第二个条件的 = 2 无效,并且由于这两个条件都是相同的语句,不要重复 CASE - 而是以 WHEN 开始第二个条件。

还建议放入 ELSE 情况以确定性地匹配所有其他行。下面,我插入了 ELSE 3,它将所有其他不匹配的行排序在两个匹配条件之后。

最后,整个结构应以 END 关键字结束。

SELECT * FROM `cronjob_reloaded` 
WHERE 
`carid` LIKE '%bmw%'
OR 
`age` BETWEEN '10' AND '15'
ORDER BY 
  CASE
    WHEN `carid` LIKE '%bmw%' THEN 1  
    WHEN `age` BETWEEN '10' AND '15'  THEN 2
    /* Advisable to add an ELSE condition to catch all other rows */
    ELSE 3
  END

关于mysql - 为什么这个 MySQL CASE 查询不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12388575/

相关文章:

jquery - 通过 ajax 调用将文本加载到 textarea

linux - 读取输入数字并将其重定向到文件中的列

mysql - 使用两个参数在 MYSQL 中运行过程

Mysql JSON_EXTRACT在做 'not matching'请求时忽略一些字段

php - 多语言网站的最佳数据库模型

ruby-on-rails - 带参数 key 轨的箱子

mysql - 将一行的结果调整为其他行

sql - 如果子查询导致SQLite情况

mysql - 在 mariadb 中连接具有相同 id 的行?