Случай, когда тогда, но с условием И внутри, когда и до того - PullRequest
10 голосов
/ 03 сентября 2011

В приведенном ниже запросе я хочу добавить условие И внутри КЕЙСА, КОГДА и до ТО это возможно?

, например, КОГДА 'r' И table1.name = "jones", ТОГДА «очень высокий»

SELECT table1.id, table1.name,
   CASE table1.event
     WHEN 'r' THEN 'very high'
     WHEN 't' THEN 'very low'
     ELSE (SELECT table2.risk FROM table2 WHERE table2.value <= table1.value
           ORDER BY table2.value DESC LIMIT 1)
   END AS risk
FROM table1
ORDER BY FIELD( table1.event, 'r', 'f', 't' ), table1.value DESC

Ответы [ 3 ]

28 голосов
/ 03 сентября 2011

Вы можете переписать ваше утверждение таким образом, чтобы выполнить то, что вы хотите

SELECT table1.id, table1.name,
   CASE 
     WHEN table1.event = 'r' AND table1.name = 'jones' THEN 'very high'
     WHEN table1.event = 't' AND table1.name = 'smith' THEN 'very low'
     ELSE (SELECT table2.risk FROM table2 WHERE table2.value <= table1.value
           ORDER BY table2.value DESC LIMIT 1)
   END AS risk
FROM table1
ORDER BY FIELD( table1.event, 'r', 'f', 't' ), table1.value DESC

обратите внимание, что вам нужно удалить table1.event после оператора CASE. документация здесь

5 голосов
/ 03 сентября 2011

Все, что имеет логическое значение (истина или ложь), может перейти в условие WHEN оператора CASE.Таким образом, вы можете заменить 'r' на:

('r' AND table1.name='jones')

Если подумать об этом больше, вам, возможно, придется потерять table1.event после CASE

SELECT table1.id, table1.name,
    CASE 
        WHEN (table1.event = 'r' AND table1.name='Jones') THEN 'very high'
        WHEN table1.event = 't' THEN 'very low'
        ELSE (SELECT table2.risk 
              FROM table2 
              WHERE table2.value <= table1.value 
              ORDER BY table2.value DESC LIMIT 1)
    END AS risk
FROM table1
ORDER BY FIELD( table1.event, 'r', 'f', 't' ), table1.value DESC
3 голосов
/ 03 сентября 2011

Переключение с case <column> when <value> then ... на case when <condition> then ...:

CASE 
WHEN table1.event = 'r' AND table1.active = 1 THEN 'very high'
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...