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

次のエラーが表示されます。

'CASE WHEN ageBETWEEN '10' AND '15' =2 THEN 2 の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

4

4 に答える 4

3

あなたの構文は少し奇妙です。= 1この場合は必要ありませんLIKE。2 番目の条件には invalid= 2があり、どちらも同じステートメントの条件であるため、繰り返さないでください。CASE代わりに で 2 番目の条件を開始しWHENます。

ELSE他のすべての行を決定論的に一致させるケースを入れることもお勧めします。以下にELSE 3、2 つの一致条件の後に一致しない他のすべての行を並べ替える を挿入しました。

最後に、構成全体が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

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 に答える