2

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

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

  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

我收到此错误:

检查与您的 MySQL 服务器版本相对应的手册,以了解在 'CASE WHEN ageBETWEEN '10' AND '15' =2 THEN 2附近使用的正确语法

4

4 回答 4

3

你的语法有点奇怪。= 1在这种情况下,您不需要LIKE,第二个条件具有 invalid = 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
于 2012-09-12T12:53:06.007 回答
2

你不需要两个CASE。只需像这样添加单个CASE

ORDER BY 
CASE 
    WHEN `carid` LIKE '%bmw%' THEN 1
    WHEN `age` BETWEEN '10' AND '15' THEN 2 
END

你也写了carid LIKE '%bmw%' = 1哪个是错的。你应该写carid LIKE '%bmw%'

于 2012-09-12T12:52:58.103 回答
0

数字不需要引号,在尝试此查询时也不需要= 1条件:CASE WHEN

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
         END);
于 2012-09-12T12:53:44.013 回答
0
SELECT * FROM `cronjob_reloaded` 
WHERE 
`carid` LIKE '%bmw%' OR 
`age` BETWEEN '10' AND '15' ORDER BY 
  CASE
    WHEN `carid` LIKE '%bmw%' = 1 THEN 1  
    WHEN `age` BETWEEN '10' AND '15' = 2 THEN 2
  END
于 2012-09-12T12:54:47.913 回答