那时的情况,但是当时和之前有AND条件

Ani*_*pos 11 mysql sql phpmyadmin

在下面的查询中,我想在CASE的WHEN中添加一个AND条件,然后才可以这样做?

例如WHEN'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
Run Code Online (Sandbox Code Playgroud)

Bri*_*laz 28

你可以像这样重写你的陈述来完成你想要的

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
Run Code Online (Sandbox Code Playgroud)

请注意,您需要table1.eventCASE声明后删除. 文档在这里


Jos*_*ell 5

任何评估为布尔值(true或false)的东西都可以在语句的WHEN条件下CASE.所以你可以替换'r'为:

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

考虑到这一点,你可能不得不失去table1.eventCASE

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
Run Code Online (Sandbox Code Playgroud)